ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

K8S-pod管理与控制器管理

K8S-pod管理与控制器管理 虚拟机配置实验 1加载并推送实验镜像到 Harbor 仓库目的将本地实验镜像 myapp:v1 和 myapp:v2 上传到私有 Harbor 仓库的 library 项目供集群拉取。docker load -i myapp.tar.gz # 加载本地镜像包 docker tag timinglee/myapp:v1 reg.timinglee.org/library/myapp:v1 # 打标签 docker push reg.timinglee.org/library/myapp:v1 # 推送到 Harbor docker tag timinglee/myapp:v2 reg.timinglee.org/library/myapp:v2 docker push reg.timinglee.org/library/myapp:v2实验 2创建 Deployment命令式目的使用命令式方式创建 Deployment 控制器管理 2 个 Pod 副本kubectl create deployment webcluster --replicas 2 --image myapp:v1 kubectl get deployments.apps # 查看 Deployment 状态 kubectl get pods -o wide # 查看 Pod 详情实验 3暴露 ServiceClusterIP 类型目的为 Deployment 创建内部 ClusterIP Service供集群内其他服务访问。kubectl expose deployment webcluster --port 80 --target-port 80 kubectl get service webcluster kubectl describe svc webcluster # 查看 Endpoints curl ClusterIP/hostname.html # 测试访问实验 4扩缩容scale目的动态调整 Deployment 的 Pod 副本数。kubectl scale deployment webcluster --replicas 3 kubectl get pods # 观察新增 Pod实验 5进入容器执行命令execkubectl exec -it pod-name -- /bin/sh ps # 查看容器内进程 exit目的进入容器内部进行调试或查看进程。实验 6查看 Pod 日志logs​ kubectl logs deployment/webcluster # 自动选择第一个 Pod kubectl logs pod-name # 指定 Pod ​目的查看 Deployment 下 Pod 的日志输出。实验 7添加标签labelkubectl label pods pod-name versionv1 kubectl get pods --show-labels # 查看标签目的为 Pod 添加自定义标签用于筛选或识别。实验 8更新镜像版本set imagekubectl set image deployment webcluster myappnew-image kubectl rollout status deployment webcluster # 查看更新进度目的触发 Deployment 的滚动更新将镜像从 v1 升级到 v2。实验 9查看 rollout 历史kubectl rollout history deployment webcluster kubectl rollout history deployment webcluster --revision1 # 查看特定版本详情目的查看 Deployment 的历史版本记录revision实验 10版本回滚rollout undokubectl rollout undo deployment webcluster --to-revision1 kubectl rollout status deployment webcluster curl NodeIP:NodePort # 验证版本回退目的将 Deployment 回滚到指定的历史版本v1实验 11创建 NodePort 类型 Servicekubectl delete service webcluster kubectl expose deployment webcluster --port 80 --target-port 80 --type NodePort kubectl get svc webcluster # 查看分配的 NodePort curl http://NodeIP:NodePort/hostname.html目的使应用能够从集群外部通过节点 IP 和端口访问。实验 12多容器 PodYAML 声明kubectl run testpod --image myapp:v1 --dry-runclient -o yaml testpod.yaml vim testpod.yaml # 添加第二个容器 busybox并设置 command: sleep 10000 kubectl apply -f testpod.yaml kubectl exec -it testpod -c busybox -- /bin/sh # 进入 busybox 容器 curl 127.0.0.1 # 访问 myapp1 的服务共享 localhost目的演示如何在 Pod 中运行多个容器并共享网络命名空间。实验 13hostPort 端口映射vim mysql.yml # 在 ports 下添加 hostPort: 8080 kubectl apply -f mysql.yml kubectl get pods -o wide # 查看 Pod 所在节点 curl http://NodeIP:8080/hostname.html目的将容器端口映射到宿主机端口使外部可直接通过宿主机 IP:port 访问。实验 14环境变量注入envenv: - name: MYSQL_ROOT_PASSWORD value: lee kubectl apply -f mysql.yml kubectl exec -it mysql -c mysql8 -- env # 查看环境变量目的通过环境变量向容器传递配置信息。实验 15节点选择器nodeSelectornodeSelector: kubernetes.io/hostname: node1 kubectl get nodes --show-labels # 查看节点标签 kubectl apply -f mysql.yml kubectl get pods -o wide # 确认 NODE 为 node1目的将 Pod 调度到指定标签的节点如 node1实验 16共享宿主机网络hostNetworkhostNetwork: true kubectl apply -f testpod.yaml kubectl exec -it testpod -- ip addr # 查看 IP 应为宿主机 IP目的使 Pod 直接使用宿主机网络栈IP 与宿主机相同。实验 17资源优先级QoS Classkubectl apply -f qos-best.yaml kubectl describe pod qos-best | grep QoS Class # 输出 BestEffort kubectl apply -f qos-burst.yaml # 设置 requests limits kubectl describe pod qos-burst | grep QoS Class # 输出 Burstable kubectl apply -f qos-guaranteed.yaml # 设置 requests limits kubectl describe pod qos-guaranteed | grep QoS Class # 输出 Guaranteed目的验证不同资源设置对应的 QoS 等级BestEffort、Burstable、Guaranteed实验 18容器重启规则restartPolicykubectl apply -f restart-always.yaml kubectl get pods -w # 观察容器退出后自动重启 kubectl apply -f restart-onfailure.yaml # 非正常退出才重启 kubectl apply -f restart-never.yaml # 退出后不重启目的验证不同 restartPolicy 下容器退出后的行为。实验 19Init 容器kubectl apply -f init-example.yml kubectl get pods -w # 状态为 Init:0/1 kubectl exec -it webserver -c init-busybox -- /bin/sh touch /testfile # 创建文件触发 Init 容器完成 exit # Pod 变为 Running目的演示 Init 容器在主容器启动前执行必须成功完成主容器才启动。实验 20Liveness 探针# 无探针 kubectl apply -f liveness-no-probe.yml kubectl exec -it webserver -- /bin/sh -c nginx -s stop kubectl describe pod webserver | grep Restart Count # 0Pod 仍 Running # 有探针 kubectl apply -f liveness-with-probe.yml kubectl exec -it webserver -- /bin/sh -c nginx -s stop kubectl get pods # 观察 Restarts 增加目的对比有无存活探针时容器异常后的恢复能力实验 21Readiness 探针# 无探针删除 index.html 后 Endpoints 仍然存在 kubectl describe svc webserver | grep Endpoints # 有 IP # 有探针删除 index.html 后 Endpoints 变为空 kubectl describe svc webserver | grep Endpoints # 空 # 恢复 index.html 后 Endpoints 重新出现目的对比有无就绪探针时 Service Endpoints 的变化。实验 22Deployment 滚动更新策略配置strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 kubectl apply -f dep.yml kubectl describe deploy webcluster | grep -A5 RollingUpdateStrategy # 输出0 max unavailable, 1 max surge目的自定义滚动更新参数实现零停机更新实验 23更新暂停与恢复pause/resumekubectl rollout pause deployment webcluster # 暂停更新 kubectl set image deployment webcluster myappmyapp:v2 # 修改镜像不触发更新 kubectl rollout history deployment webcluster # 没有新 revision kubectl rollout resume deployment webcluster # 恢复更新 kubectl rollout history deployment webcluster # 出现新 revision目的控制更新过程实现金丝雀发布。
返回列表