系列文章
第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:StatefulSet 简单使用 第五章:✨ k8s入门:存储(storage) 第六章:✨ K8S 配置 storageclass 使用 nfs 动态申领本地磁盘空间 第七章:✨ k8s入门:配置 ConfigMap & Secret 第八章:✨ k8s入门:k8s入门:Helm 构建 MySQL 第九章:✨ k8s入门:kubernetes-dashboard 安装 第十章:✨ k8s入门:kube-prometheus-stack 全家桶搭建(Grafana + Prometheus)
文章目录
- 系列文章
- 一、简介
- 二、pod 和 deployment 关系
- 三、k8s 使用本地镜像部署
- 四、上传镜像到仓库
- 五、公共镜像部署
- 六、私人镜像部署
- 1、创建阿里云验证
- 2、私人镜像创建 pod
- ①、kubectl port-forward 临时暴露端口访问测试
- ②、错误: open /run/flannel/subnet.env: no such file or directory
</li><li>③、创建 pod 暴露端口</li></ul><ul data-indent="4"><li>3、创建 Deployment</li><li>4、历史版本控制</li><li>5、其他命令</li></ul><ul data-indent="3"><li>七、小妙招</li><li>八、遗留问题</li></ul><p> <br></p><hr style="background-color: rgb(232, 232, 232); border: 1px solid transparent; margin: 18px 0px;"><p>参考文章: https://k8s.easydoc.net/</p><h5>一、简介</h5><p>接上篇裸机部署 k8s 集群:</p><p>基础环境:</p><ul><li>系统⭐Linux、centos 7.9 、3 台虚拟机</li><li>虚拟机IP⭐master:192.168.25.100,node1:192.168.25.101,node2:192.168.25.102</li><li>k8s 版本⭐1.23.1</li><li>docker 版本⭐20.10.16</li></ul><p>官方文档</p><ul><li>Kubernetes 官方文档:https://kubernetes.io/zh/docs/setup/ </li><li>Kubernetes 中文社区 | 中文文档:http://docs.kubernetes.org.cn/ </li><li>spring-cloud-kubernetes:https://docs.spring.io/spring-cloud-kubernetes/docs/current/reference/html/ </li><li>kubectl 命令:https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands </li></ul><h5>二、pod 和 deployment 关系</h5><ul><li>pod </li></ul><ul data-indent="1"><li>Pod 是 k8s 的最小调度单位</li><li>一个 Pod 代表集群上正在运行的一个进程</li><li>Pod 中运行一个容器,可以将 Pod 视为单个封装的容器,但是 K8s 是直接管理 Pod 而不是容器</li><li>Pod 中运行多个容器,这些容器可以形成一个单一的内部service单位,可以相互通信,共享数据</li><li>一个 Pod 被分配一个独立的IP地址,Pod中的每个容器共享 IP 地址和网络端口,Pod 内的容器可以使用 localhost 相互通信。</li><li>Pod 中的容器与Pod 外部通信时,他们必须协调如何使用共享网络资源(如端口)。</li></ul><ul><li>deployment </li></ul><ul data-indent="1"><li>创建 deployment 的时候一定会创建Pod</li><li>Deployment 可以新建及管理多副本应用(即多个副本 Pod)</li><li>deployment 可以部署多个Pod,所有 Pod 的名字后面会随机带一串随机数避免重复</li><li>Deployement 会配合 RC 调度保障定量的 Pod 数量。</li></ul><h5>三、k8s 使用本地镜像部署</h5><p>使用 Dockerfile 在本地生成的镜像,不用上传到仓库,<mark>该方法不常用</mark></p><p>k8s默认会从远端拉取镜像,其默认配置参数 imagePullPolicy 为 Always,我们可以将该参数设置为Never 或者 IfNotPresent,k8s 就会从本地拉取镜像了。</p><p>master 节点 pod 配置</p><div></div><p><mark>注意:</mark></p><p> 本地拉去镜像:指的是如果有一个 master 节点、两个 node1、node2 节点,如果 kubectl 选择将 pod 运行在 node2 节点,则 node2 本地必须有 yaml 指定的镜像,否则会报错<br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144928_670627782f49d47221.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_docker' title="在这里插入图片描述" style="width: 842px; visibility: visible;"></p><p><br></p><p> 这种方法节点少还可以用,节点多不适用<br></p><h5>四、上传镜像到仓库</h5><p>将准备好的 jar 制作成镜像上传到私人仓库,可参考我另一篇博客 </p><p>上传成功可以拉取镜像测试一下,jar 包中接口如下</p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144928_6706277856eed27116.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_kubernetes_02' title="在这里插入图片描述" style="width: 571px; visibility: visible;"></p><h5>五、公共镜像部署</h5><p>对于公共镜像可以直接使用 kubectl run 创建 pod</p><div></div><p>使用公共镜像创建 pod,公共镜像可以直接 docker pull 拉取,不需要登陆</p><p>在可以使用 kubectl 工具的节点(一般建议 master 节点)新建 k8s-pod-dockerhub-public.yaml 文件,添加如下内容</p><div></div><p>使用 部署 pod</p><ul><li><li>kubectl get pod -o wide 查看 pod 状态以及部署详情</li><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144928_670627788ce2365128.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_linux_03' title="在这里插入图片描述" style="width: 770px; visibility: visible;"></p></li><li><li>kubectl describe pod nginx 查看 pod 部署日志</li><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144928_67062778ce90628759.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_k8s_04' title="在这里插入图片描述" style="width: 754px; visibility: visible;"></p></li><li><li>kubectl logs -f test-pod 查看 pod 中指定容器启动日志</li><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144929_670627790517931956.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_linux_05' title="在这里插入图片描述" style="width: 890px; visibility: visible;"></p></li><li><li>kubectl exec -it test-pod /bin/sh 进入容器</li><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144929_670627793bca22474.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_容器_06' title="在这里插入图片描述" style="width: 890px; visibility: visible;"></p></li></ul><h5>六、私人镜像部署</h5><p>dockerhub 和阿里云仓库操作类似</p><h6>1、创建阿里云验证</h6><p>登陆阿里云仓库 ,登陆成功会生成 ~/.docker/config.json 验证文件</p><p>k8s 集群中通过 ~/.docker/config.json 文件制作 secret 凭证</p><div></div><p>保存好下面的信息<br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144929_6706277972b0d10356.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_k8s_07' title="在这里插入图片描述" style="width: 916px; visibility: visible;"></p><p>新建一个 secret 的 yaml 文件,就叫 registry-secret.yaml</p><div></div><p>创建并检查 secret 凭证</p><div></div><p>如下创建成功<br></p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144929_67062779a8d6434888.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_docker_08' title="在这里插入图片描述" style="width: 392px; visibility: visible;"></p><h6>2、私人镜像创建 pod</h6><p>新建 aliyun-private-springboot-pod.yaml 文件,添加 secret 验证拉取私人镜像</p><div></div><p>创建并查看 pod 信息</p><div></div><p>查看 pod 状态已启动,部署到了 node1 节点,拉去镜像用时 14 s,查看 pod 启动日志发现端口 8080</p><div></div><h6>①、kubectl port-forward 临时暴露端口访问测试</h6><p>把集群内 8080 端口映射到节点 8090,在 master 节点执行(在可以使用 kubectl 命令的节点都可以执行)</p><ul><li>本机访问<br> 默认只能本地访问 127.0.0.1(IPv4) 和 ::1 (IPv6)</li></ul><div></div><p>重新打开一个 master 连接,因为使用 kubectl port-forward 是临时的,不能关闭,关闭即不起作用</p><div></div><ul><li>所有地址<br> 使用 --address 0.0.0.0 指定所有地址都可访问</li></ul><div></div><p>在宿主机使用虚拟机 master IP地址访问 http://192.168.25.100:8090/k8s/test</p><p style="text-align:center;"><img src='https://s2.51cto.com/images/blog/202410/09144929_67062779d7ffb25886.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=/resize,m_fixed,w_1184' alt='python 自动生成k8s yaml文件_kubernetes_09' title="在这里插入图片描述" style="width: 582px; visibility: visible;"></p><h6>②、错误: open /run/flannel/subnet.env: no such file or directory报错:如果你运行 报错错误
③、创建 pod 暴露端口
使用 DockerHub 镜像 redis:latest,创建一个 redis,暴露节点 6379 端口
创建 pod


3、创建 Deployment
Deployment 示例,新建 aliyun-private-springboot-deployment.yaml 文件添加如下内容,使用阿里云私人镜像部署三个 pod
创建 Deployment 查看运行状态

命令行指定 pod 副本数量,可用于伸缩扩展副本

如果想访问测试可以使用
4、历史版本控制
- 新增一个镜像版本 registry.cn-zhangjiakou.aliyuncs.com/k8s-private/springboot:1.1
- 修改 aliyun-private-springboot-deployment.yaml 文件指定镜像版本为 1.1
- 重新使用 kubectl apply -f aliyun-private-springboot-deployment.yaml 部署


查看部署详情 ,可以看到拉取 1.1版本

查看历史版本:,可以发现有两个版本

版本回滚可以使用如下命令
5、其他命令
七、小妙招
在使用vim进行文档操作时,粘贴多行时,会出现错位、错乱(行注释极为明显)
八、遗留问题
- 每次只能访问一个 pod,没有负载均衡自动转发到不同 pod
- 访问还需要端口转发
- Pod 重新创建后 IP 变了,名字也变了
下一篇使用 Service 解决这些问题









版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/199208.html