Whose Blue
406 字
2 分钟
K8S deployment
deployment基本概念
Deployment 是k8s中最常用的工作负载资源,用于管理无状态应用,实现Pod的部署、自愈、扩缩容、滚动更新与回滚,实现应用高可用、自动化运维,是K8s最核心、最常用的资源对象。
说白了就是管pod的东西。
deployment实践
环境使用上节部署的nginx-redis pod,还是用大佬的案例来展开:
Waiting for api.github.com...
apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-redis-deploymentspec: replicas: 1
selector: matchLabels: app: nginx-redis
template: metadata: labels: app: nginx-redis spec: containers: # 容器1:Nginx - name: nginx image: nginx ports: - containerPort: 80
# 容器2:Redis - name: redis image: redis:alpine ports: - containerPort: 6379- 类型
kind为Deployment,名称为nginx-redis-deployment。 spec字段中 :
replicas为 1,表示部署一个pod副本。selector字段中matchLabels表示 deployment 会管理 (selector) 所有labels = nginx-redis的 pod,selector是 Deployment 要找的 Pod。template里面是用来定义pod资源的,这里的label app需要和前面对应。
使用 apply -f deployment.yaml 部署:
root@k8s-master1:~# kubectl apply -f deployment.yamlroot@k8s-master1:~# kubectl get pods# NAME READY STATUS RESTARTS AGE# nginx-redis-deployment-6c69b4d46c-p886c 1/1 Running 0 2d10h
# 查看使用的deployment文件root@k8s-master1:~# kubectl get deployment# NAME READY UP-TO-DATE AVAILABLE AGE# nginx-redis-deployment 1/1 1 1 2d23h
kubectl get deploy nginx-redis-deployment -o yaml这时候手动把这个pod给删除:
root@k8s-master1:~# kubectl delete pod nginx-redis-deployment-6c69b4d46c-p886croot@k8s-master1:~# kubectl get pods# NAME READY STATUS RESTARTS AGE# nginx-redis-deployment-6c69b4d46c-b4k85 1/1 Running 0 5m3s# nginx-redis-pod 2/2 Running 2 (8m16s ago) 4d3hdeployment会自动创建一个新的pod,即可以通过只维护deployment这一个文件来实现多个pod的管理。
这里删除时遇到了 Failed to create pod sandbox: open /run/systemd/resolve/resolv.conf: no such file or directory,只需要在worker1节点上创建下这个文件的软连接就行。
mkdir -p /run/systemd/resolve/ln -s /etc/resolv.conf /run/systemd/resolve/resolv.conf K8S deployment
https://ltreedo.icu/posts/cloud-note/deployment/