Kubernetes(4)deployment管理pod
kubernetes cluster由master和node组成
master节点是kubernetes cluster的大脑,它同时也是一个node
1.API Server(k8s.gcr.io/kube-apiserver):是kubernetes cluster的前端接口,各种客户端工具以及kubernetes其他组件可以通过它管理cluster的各种资源
2.k8s.gcr.io/kube-scheduler:负责决定将pod放在哪个node上运行
3.k8s.gcr.io/kube-controller-manager:负责管理cluster各种资源,保证资源处于预期状态
4.k8s.gcr.io/etcd:负责保存集群的配置信息和各种资源的状态信息,当数据发生变化的时候,etcd会快速通知kubernetes相关组件
5.pod网络:pod要能够相互通信,kubernetes cluster必须部署pod网络,flannel是其中一个可选的方案
node节点
1.kubelet
2.kube-proxy
3.pod网络
几乎所有的kubernetes组建本身也运行在pod里面
[k8s@server1 ~]$ kubectl get pod --all-namespaces -o wide
我们将通过实践深入学习kubernetes的各种特性,
作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用
kubernetes通过各种controller来管理pod的生命周期,
为了满足不同的业务场景,kubernetes开发了多种,
我们首先学习最常用的deployment
deployment管理pod
1.1运行deployment
# 部署两个副本的 nginx-deployment 容器的image为nginx:1.7.9
[k8s@server1 ~]$ kubectl run nginx-deployment --image=nginx:1.7.9 --replicas=2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx-deployment created
# 通过kubectl get deployment命令查看nginx-deployment的状态,显示输出的两个副本正常运行
[k8s@server1 ~]$ kubectl get deployment nginx-deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 2/2 2 2 2m31s
# 获取更详细的信息
[k8s@server1 ~]$ kubectl describe deployment nginx-deployment
...
# 重点看这里
# 这里告诉我们创建了一个 replicaset(容器副本) nginx-deployment-748ff87d9d
# Events是 deployment的日志,记录了replicaset的启动过程
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 3m24s deployment-controller Scaled up replica set nginx-deployment-748ff87d9d to 2
...
[k8s@server1 ~]$ kubectl get replicaset
NAME DESIRED CURRENT READY AGE
nginx-deployment-748ff87d9d 2 2 2 16m
[k8s@server1 ~]$ kubectl describe replicaset nginx-deployment-748ff87d9d
Name: nginx-deployment-748ff87d9d
Namespace: default
Selector: pod-template-hash=748ff87d9d,run=nginx-deployment
Labels: pod-template-hash=748ff87d9d
run=nginx-deployment
Annotations: deployment.kubernetes.io/desired-replicas: 2
deployment.kubernetes.io/max-replicas: 3
deployment.kubernetes.io/revision: 1
# 指明replicaset是由Deployment/nginx-deployment创建的
Controlled By: Deployment/nginx-deployment
Replicas: 2 current / 2 desired
Pods Status: 2 Running / 0 Waiting / 0 Succeeded / 0 Failed
Pod Template:
Labels: pod-template-hash=748ff87d9d
run=nginx-deployment
Containers:
nginx-deployment:
Image: nginx:1.7.9
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulCreate 16m replicaset-controller Created pod: nginx-deployment-748ff87d9d-bxc8r
Normal SuccessfulCreate 16m replicaset-controller Created pod: nginx-deployment-748ff87d9d-25k5w
# 两个副本处于running状态
[k8s@server1 ~]$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-748ff87d9d-25k5w 1/1 Running 0 17m
nginx-deployment-748ff87d9d-bxc8r 1/1 Running 0 17m
# 获取更详细的信息
[k8s@server1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
httpd-app-5bc589d9f7-pns4q 1/1 Running 0 31m
httpd-app-5bc589d9f7-qdq4z 1/1 Running 0 31m
nginx-deployment-748ff87d9d-25k5w 1/1 Running 0 17m
nginx-deployment-748ff87d9d-bxc8r 1/1 Running 0 17m
[k8s@server1 ~]$ kubectl describe pod nginx-deployment-748ff87d9d-25k5w
Name: nginx-deployment-748ff87d9d-25k5w
Namespace: default
Priority: 0
Node: server3/172.25.0.3
Start Time: Sat, 24 Aug 2019 14:52:14 +0800
Labels: pod-template-hash=748ff87d9d
run=nginx-deployment
Annotations: <none>
Status: Running
IP: 10.244.2.3
Controlled By: ReplicaSet/nginx-deployment-748ff87d9d
Containers:
nginx-deployment:
Container ID: docker://1c3dcd7cabea668eb5e947a1fbf9bf5b8837220c52b32e75eced9e198b4c3149
Image: nginx:1.7.9
Image ID: docker-pullable://nginx@sha256:e3456c851a152494c3e4ff5fcc26f240206abac0c9d794affb40e0714846c451
Port: <none>
Host Port: <none>
State: Running
Started: Sat, 24 Aug 2019 14:54:44 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-zt8dv (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-zt8dv:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-zt8dv
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
# 记录了pod的启动过程,如果操作失败(eg:image不存在),也可以在这里查到原因
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 20m default-scheduler Successfully assigned default/nginx-deployment-748ff87d9d-25k5w to server3
Normal Pulling 20m kubelet, serv