15|实战演练:玩转Kubernetes(1)
Kubernetes 技术要点回顾
- 深入了解
- 翻译
- 解释
- 总结
Kubernetes是云原生时代的基础操作系统,本文通过理论知识和实际操作相结合的方式,帮助读者快速了解Kubernetes的基本概念和实际应用。文章首先介绍了Kubernetes的技术要点,包括节点划分、核心组件、插件机制、API对象等,并重点介绍了Kubernetes的核心对象“Pod”以及其他API对象的基本原则和用法。随后,通过搭建WordPress网站的实战演练,展示了将应用封装成Pod、管理环境变量和网络环境的过程。文章强调了Kubernetes集群内部维护的专用网络和外界通信的端口转发方式,以及使用Dashboard管理Kubernetes的图形界面。总结中指出,尽管朝着云原生的方向迈出了一大步,但容器编排仍有改进空间,需要研究更多的API对象来解决问题。最后,给出了课下作业,鼓励读者动手体验并分享学习成果。
《Kubernetes 入门实战课》,新⼈⾸单¥59
全部留言(52)
- 最新
- 精选
- YueShiMac上或者Window上,可能出现访问不到问题,这里写了一篇排查问题的思路,期望能帮到各位老板 https://juejin.cn/post/7127679053242302477
作者回复: great
2022-08-04归属地:上海617 - 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-25314 - 朱雯学了这一节,没感觉到容器编排的好用,反而遇到了一个问题,在配置中,我把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归属地:北京68 - 椰子老师,目前Pod配置中使用了固定IP。如果pod被重启了,ip 是否会变化?如果有变化,这样配置是否有点不合理?
作者回复: 是的,会变化,到后面的中级篇会用Service对象来解决,这里是从docker到Kubernetes的一个过渡阶段。
2022-07-257 - 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 - edwardkubectl port-forward 老师请教下 这个命令设置端口转发后,怎么查看和取消?
作者回复: 因为命令后面有个一个“&”,所以就转入了后台运行,可以用ps + grep来查看,用“fg”带到前台,Ctrl+C停止,或者看到进程号后直接kill。
2022-11-08归属地:北京23 - 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-2533 - 未来已来第四步 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