Kubernetes 支持两种方式创建资源:
(1)用kubectl命令直接创建,在命令行中通过参数指定资源的属性。此方式简单直观,比较适合临时测试或实验使用。
kubectl run net-test --image=alpine --replicas=2 sleep 36000
(2)通过配置文件和kubectl create创建。在配置文件中描述了应用的信息和需要达到的预期状态。
kubectl create -f nginx-deployment.yaml
声明式创建资源 通过yaml清单
1.准备配置清单
[root@linux-node1 ~]# vim nginx-deployment.yaml #使用yaml的方式进行创建应用
apiVersion: apps/v1 #apiVersion是当前配置格式的版本
kind: Deployment #kind是要创建的资源类型,这里是Deploymnet
metadata: #metadata是该资源的元数据,name是必须的元数据项
name: nginx-deployment
labels:
app: nginx
spec: #spec部分是该Deployment的规则说明
replicas: 3 #relicas指定副本数量,默认为1
selector:
matchLabels:
app: nginx
template: #template定义Pod的模板,这是配置的重要部分
metadata: #metadata定义Pod的元数据,至少要顶一个label,label的key和value可以任意指定
labels:
app: nginx
spec: #spec描述的是Pod的规则,此部分定义pod中每一个容器的属性,name和image是必需的
containers:
- name: nginx
image: harbor.rongbiz.cn/public/nginx:alpine
ports:
- containerPort: 80
[root@linux-node1 ~]# kubectl create -f nginx-deployment.yaml #创建nginx-deployment应用
deployment.apps "nginx-deployment" created
2.查看deployment
[root@rstx-203 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
net-test 0/2 2 0 159m
nginx-deployment 3/3 1 3 18h
[root@rstx-203 ~]# kubectl describe deployment nginx-deployment
Name: nginx-deployment
Namespace: default
CreationTimestamp: Mon, 19 Jul 2021 19:24:50 +0800
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 3
kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"app":"nginx"},"name":"nginx-deployment","namespace":"d...
kubernetes.io/change-cause: kubectl set image deployment/nginx-deployment nginx=harbor.rongbiz.cn/public/nginx:v1.7.2 --record=true
Selector: app=nginx
Replicas: 3 desired | 1 updated | 4 total | 3 available | 1 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: harbor.rongbiz.cn/public/nginx:v1.7.2
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing False ProgressDeadlineExceeded
OldReplicaSets: nginx-deployment-d75f79f4d (3/3 replicas created)
NewReplicaSet: nginx-deployment-5455f758b9 (1/1 replicas created)
Events: <none>
3.查看pod
[root@rstx-203 ~]# kubectl get pod -o wide #查看pod的状态信息 及所在的node节点
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-867854d496-rk74x 1/1 Running 0 94s 172.7.241.2 rstx4-241.host.com <none> <none>
nginx-deployment-867854d496-rrn5g 1/1 Running 0 89s 172.7.205.2 rstx4-205.host.com <none> <none>
nginx-deployment-867854d496-zc2lm 1/1 Running 0 91s 172.7.203.2 rstx4-203.host.com <none> <none>
[root@rstx-203 ~]# kubectl describe pod nginx-deployment-867854d496-rk74x #查看pod的详细信息
Name: nginx-deployment-867854d496-rk74x
Namespace: default
Priority: 0
Node: rstx4-241.host.com/192.168.1.241
Start Time: Tue, 20 Jul 2021 13:49:25 +0800
Labels: app=nginx
pod-template-hash=867854d496
Annotations: <none>
Status: Running
IP: 172.7.241.2
Controlled By: ReplicaSet/nginx-deployment-867854d496 #由那个rs控制的
Containers:
nginx:
Container ID: docker://65599828e6deac13f2c5ed02bcf6eac4cfae8c59b48103bd5b6572573a8293dd
Image: harbor.rongbiz.cn/public/nginx:v1.7.9
Image ID: docker-pullable://harbor.rongbiz.cn/public/nginx@sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Tue, 20 Jul 2021 13:49:27 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-clf9q (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-clf9q:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-clf9q
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Pulled 5m31s kubelet, rstx4-241.host.com Container image "harbor.rongbiz.cn/public/nginx:v1.7.9" already present on machine
Normal Created 5m31s kubelet, rstx4-241.host.com Created container nginx
Normal Started 5m30s kubelet, rstx4-241.host.com Started container nginx
Normal Scheduled 104s default-scheduler Successfully assigned default/nginx-deployment-867854d496-rk74x to rstx4-241.host.com
4.更新版本
更换
[root@rstx-203 ~]# kubectl set image deployment/nginx-deployment nginx=harbor.rongbiz.cn/public/nginx:1.20 --record #nginx= 此信息是pod中更换镜像容器的名字 记录这条命令加参数 --record
deployment.extensions/nginx-deployment image updated
[root@rstx-203 ~]# kubectl get deployment nginx-deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/3 2 3 10m
[root@rstx-203 ~]# kubectl get deployment nginx-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 3 3 10m nginx harbor.rongbiz.cn/public/nginx:1.20 app=nginx
查看历史
[root@rstx-203 ~]# kubectl rollout history deployment/nginx-deployment
deployment.extensions/nginx-deployment
REVISION CHANGE-CAUSE
1 <none>
3 <none>
4 <none>
5 kubectl set image deployment/nginx-deployment nginx=harbor.rongbiz.cn/public/nginx:1.20 --record=true
[root@rstx-203 ~]# kubectl rollout history deployment/nginx-deployment --revision=5
deployment.extensions/nginx-deployment with revision #5
Pod Template:
Labels: app=nginx
pod-template-hash=7d79b7b698
Annotations: kubernetes.io/change-cause: kubectl set image deployment/nginx-deployment nginx=harbor.rongbiz.cn/public/nginx:1.20 --record=true
Containers:
nginx:
Image: harbor.rongbiz.cn/public/nginx:1.20
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts: <none>
Volumes: <none>
快速回滚
[root@rstx-203 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back
[root@rstx-203 ~]# kubectl get deployment nginx-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 2 3 26m nginx harbor.rongbiz.cn/public/nginx:v1.7.9 app=nginx
[root@rstx-203 ~]# kubectl rollout undo deployment/nginx-deployment
deployment.extensions/nginx-deployment rolled back
[root@rstx-203 ~]# kubectl get deployment nginx-deployment -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 3/3 1 3 26m nginx harbor.rongbiz.cn/public/nginx:1.20 app=nginx
5.快速扩容
[root@rstx-203 ~]# kubectl scale deployment nginx-deployment --replicas 5
deployment.extensions/nginx-deployment scaled
[root@rstx-203 ~]# kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-deployment 3/5 5 3 28m
[root@rstx-203 ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-7d79b7b698-9pjbx 0/1 ContainerCreating 0 10s
nginx-deployment-7d79b7b698-jh6xt 1/1 Running 0 10s
nginx-deployment-7d79b7b698-pvkcn 1/1 Running 0 2m23s
nginx-deployment-7d79b7b698-t4gd4 1/1 Running 0 2m28s
nginx-deployment-7d79b7b698-vvnl8 1/1 Running 0 2m20s