Kubernetes 入门实战课
罗剑锋
Kong 高级工程师,Nginx/OpenResty 开源项目贡献者
19527 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 41 讲
Kubernetes 入门实战课
15
15
1.0x
00:00/00:00
登录|注册

15|实战演练:玩转Kubernetes(1)

你好,我是 Chrono。
经过两个星期的学习,到今天我们的“初级篇”也快要结束了。
和之前的“入门篇”一样,在这次课里,我也会对前面学过的知识做一个比较全面的回顾,毕竟 Kubernetes 领域里有很多新名词、新术语、新架构,知识点多且杂,这样的总结复习就更有必要。
接下来我还是先简要列举一下“初级篇”里讲到的 Kubernetes 要点,然后再综合运用这些知识,演示一个实战项目——还是搭建 WordPress 网站,不过这次不是在 Docker 里,而是在 Kubernetes 集群里。

Kubernetes 技术要点回顾

容器技术开启了云原生的大潮,但成熟的容器技术,到生产环境的应用部署的时候,却显得“步履维艰”。因为容器只是针对单个进程的隔离和封装,而实际的应用场景却是要求许多的应用进程互相协同工作,其中的各种关系和需求非常复杂,在容器这个技术层次很难掌控。
为了解决这个问题,容器编排(Container Orchestration)就出现了,它可以说是以前的运维工作在云原生世界的落地实践,本质上还是在集群里调度管理应用程序,只不过管理的主体由人变成了计算机,管理的目标由原生进程变成了容器和镜像。
而现在,容器编排领域的王者就是——Kubernetes。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kubernetes是云原生时代的基础操作系统,本文通过理论知识和实际操作相结合的方式,帮助读者快速了解Kubernetes的基本概念和实际应用。文章首先介绍了Kubernetes的技术要点,包括节点划分、核心组件、插件机制、API对象等,并重点介绍了Kubernetes的核心对象“Pod”以及其他API对象的基本原则和用法。随后,通过搭建WordPress网站的实战演练,展示了将应用封装成Pod、管理环境变量和网络环境的过程。文章强调了Kubernetes集群内部维护的专用网络和外界通信的端口转发方式,以及使用Dashboard管理Kubernetes的图形界面。总结中指出,尽管朝着云原生的方向迈出了一大步,但容器编排仍有改进空间,需要研究更多的API对象来解决问题。最后,给出了课下作业,鼓励读者动手体验并分享学习成果。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kubernetes 入门实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(52)

  • 最新
  • 精选
  • YueShi
    Mac上或者Window上,可能出现访问不到问题,这里写了一篇排查问题的思路,期望能帮到各位老板 https://juejin.cn/post/7127679053242302477

    作者回复: great

    2022-08-04归属地:上海
    6
    17
  • pyhhou
    思考题 2, 试着写出了 Pod 的 YAML 文件 apiVersion: v1 kind: ConfigMap metadata: name: ngx-cm data: default.conf: |- server { listen 80; default_type text/html; location / { proxy_http_version 1.1; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } } --- apiVersion: v1 kind: Pod metadata: name: ngx-pod labels: app: nginx-alpine role: website spec: volumes: - name: conf configMap: name: ngx-cm containers: - volumeMounts: - mountPath: /etc/nginx/conf.d/ name: conf image: nginx:alpine name: ngx-pod imagePullPolicy: IfNotPresent ports: - containerPort: 80 可以成功创建 Pod,nginx 的配置文件也被挂载到指定的位置,但是浏览器还是无法访问 wordpress,不知道是不是我的 YAML 文件中少了什么🤔,还望老师指点

    作者回复: YAML写的非常好,不过Nginx配置文件里的proxy_pass,地址不能是127.0.0.1,必须是WordPress Pod的地址。 还有因为Nginx pod运行在Kubernetes里,是与外界隔离的,必须要用port-forward外界才能看到,可以参考WordPress的做法。 但这方法比较麻烦,到中级篇我们学习了Service、Ingress就能够轻松解决了。

    2022-07-25
    3
    14
  • 朱雯
    学了这一节,没感觉到容器编排的好用,反而遇到了一个问题,在配置中,我把wordpress链接数据库的host给小写了,结果一直告诉我链接数据库失败,我也没有排查手段,一直失败,我想的是,这个k8s的部署步骤实在是太复杂了,复杂到配置需要一个yaml,容器需要一个yaml,port-forward也需要一个yaml,我想如果是docker直接部署,其实就需要两条命令,所有参数都放到env中,或者放到配置文件中,也比检查yaml文件强,在入门篇中没感受到k8s的好用,只感觉到琐碎,是因为服务太小,还是因为没用好的原因呢

    作者回复: Kubernetes面对的是大规模集群,其实这些都是可以用ci/cd自动化的,我们现在的学习是从底层做起全手动操作,当然会麻烦一些,到后面会有更高级的对象,比如Deployment。

    2022-07-28归属地:陕西
    10
  • 马以
    写一下第2题吧解题步骤: 首先如果我们把docker 形式改成pod形式这里存在两个问题(1)网络问题,(2)nginx配置文件加载问题, 第一个问题k8s的插件会处理节点内以及节点间网络通信问题,这个我们这里暂时不需要考虑, 那么需要我们处理的就是配置文件问题:这里我们可以用多个方法处理 a: pod挂载宿主机目录,把配置文件放到宿主机目录下,容器启动挂载 b: 使用我们学过的configMap c:使用pv、pvc 这个后面老师应该会讲到 这里我门就使用第二种方法,也是评论里使用最多的方法: yml文件如下: ngx-cm.yml apiVersion: v1 kind: ConfigMap metadata: name: ngx-cm data: nginx.conf: | server { listen 8080; #default_type text/html; location / { proxy_http_version 1.1; proxy_set_header Host $host; proxy_pass http://172.17.0.9:80; } } nginx.yml: apiVersion: v1 kind: Pod metadata: name: ngx-pod labels: env: demo owner: ant spec: volumes: - name: nginx-conf configMap: name: ngx-cm items: - key: nginx.conf path: default.conf containers: - image: nginx:alpine name: ngx volumeMounts: - name: nginx-conf mountPath: /etc/nginx/conf.d ports: - containerPort: 8080 然后使用 kubectl apply -f nginx.yml 创建pod,但是这个时候由于k8s节点还是一个隔离环境,所以我们还是无法访问, 所以我们要在网页观察到具体的网页内容,还是要再用docker创建一层nginx代理,server 内容如下: server { listen 80; default_type text/html; location / { proxy_http_version 1.1; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8888; } } 使用 docker run -d --rm --net=host -v /home/ant/kubernetes/pod/nginx-conf/nginx.conf:/etc/nginx/conf.d/default.conf nginx:alpine 启动, 然后使用 kubectl port-forward ngx-pod 8888:8080 & 做转发 访问 http://192.168.56.208/ 正常访问

    作者回复: awesome!

    2022-08-12归属地:北京
    6
    8
  • 椰子
    老师,目前Pod配置中使用了固定IP。如果pod被重启了,ip 是否会变化?如果有变化,这样配置是否有点不合理?

    作者回复: 是的,会变化,到后面的中级篇会用Service对象来解决,这里是从docker到Kubernetes的一个过渡阶段。

    2022-07-25
    7
  • wcy
    作业1:改用secret可以,这个简单,把data里对应的值用base64编码就行,对应pod的yml改下 作业2:nginx改成pod 运行是成功的, 但是port-forward出来,linux虚机上用firefox打开页面是ok的。但在shell终端本地浏览器访问不了,看了下应该是port-forward的问题,映射的端口绑定在Linux虚机127.0.0.1上,所以virtualbox转发不出来。 nginx cm: apiVersion: v1 kind: ConfigMap metadata: name: ngx-cm data: nginx.conf: | server { # listen 80; listen 8080; # default_type text/html; location / { proxy_http_version 1.1; proxy_set_header Host $host; proxy_pass http://172.17.0.10:80; } } nginx pod配置: apiVersion: v1 kind: Pod metadata: name: wp-ngx-pod labels: env: test spec: containers: - image: nginx:alpine name: wp-ngx ports: - containerPort: 8080 volumeMounts: - mountPath: /etc/nginx/conf.d/ name: myngxconf volumes: - name: myngxconf configMap: name: ngx-cm items: - key: nginx.conf path: default.conf

    作者回复: great

    2022-08-04归属地:北京
    4
  • edward
    kubectl port-forward 老师请教下 这个命令设置端口转发后,怎么查看和取消?

    作者回复: 因为命令后面有个一个“&”,所以就转入了后台运行,可以用ps + grep来查看,用“fg”带到前台,Ctrl+C停止,或者看到进程号后直接kill。

    2022-11-08归属地:北京
    2
    3
  • pyhhou
    有在操作过程中遇到几个问题,还烦请老师指点 1、前面 2 个步骤中,在 kubectl apply -f *-pod.yml 之前是不是也得 apply 一下之前定义的 configMap 对象? 2、对于反向代理,不是特别的理解,老师能简单解释一下反向代理,并附带说明这里 Nginx 这里作为反向代理的目的是什么吗? 3、`minikube dashboard` 无法在命令行显示界面,我将 URL 复制粘贴到 Ubuntu 虚拟机图形界面上的浏览器中,但回复的 JSON 中显示 404?不太清楚有没有更好的方法 Opening http://127.0.0.1:38539/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser... Error: no DISPLAY environment variable specified 4、对于思考题的 2,我创建一个了 nginx Pod,然后将其配置文件通过 kubectl cp 拷贝到 Pod 容器中的对应位置,但是发现并不起作用,本来想着重启 Pod 让配置生效,但是并没有找到对应的指令。这里是不是需要其他的 K8S API 对象的帮助?

    作者回复: 1. ConfigMap已经含在pod yaml里了,是用“---”分隔的多个对象,所以一个文件就可以创建ConfigMap和pod。 2.反向代理就是在真正网站(WordPress)前的一个代理软件,提供安全防护等功能,可参考《透视HTTP协议》。不加这个其实也可以,主要的目的是模拟真实环境,增加一点部署难度。 3. minikube dashboard会自动启动浏览器,可以加-h看它的详细用法,也可以粘贴url。 4.要把配置文件用ConfigMap的形式加载,拷贝不行。

    2022-07-25
    3
    3
  • 未来已来
    第四步 Nginx 部分使用 docker 启动命令把 -v 后面的 /tmp/proxy.conf 改为 `pwd`/proxy.conf 即可,跟 dokcer 实战部分保持一致

    作者回复: great

    2023-05-14归属地:广东
    2
  • doos
    这个入门写的太好了,我当时学是先学习docker,研究了3个月docker,后来才慢慢去接触k8s学了半年,感觉内容太多了,而且知识比较分散

    作者回复: many thanks.

    2023-02-23归属地:浙江
    2
收起评论
显示
设置
留言
52
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部