Kubectl apiserver 管理對象命令
Pod service replicaset deployment statefulet daemonset job cronjob node等
Kubectl get cs 查看信息等
命令啟動pod
Kubectl run -> create a deployment or job manage the created container
Kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 普通pod
Kubectl run pi --schedule=”0/5 * * * ?” --image=perl job控制器
# 查看信息
kubectl get svc
kubectl get pods
kubectl get deployments
kubectl describe pods nginx-deploy # 列出所有pod詳情
kubectl describe deployment nginx-deploy # 列出deployment控制器詳情
# 暴露端口 創建svc
expose deployment nginx-deploy --name=nginx-deploy --port=80 --protocol=TCP --target-port=80
# 修改副本集 數量為5
kubectl scale --replicas=5 deployment nginx-deploy
# 滾動更新
kubectl set image deployment nginx-deploy nginx=nginx:1.5
# 查看滾動更新情況
kubectl rollout status deployment nginx-deploy
# 修改對外訪問
# 手動在外部做負載均衡器到內部端口
kubectl edit svc nginx-deploy
Type: ClusterIP ---> Nodeport
kubectl get svc
Curl nodeip:隨機端口
yaml文件的學習
配置清單
# 查看pod配置清單 以yaml文件輸出
kubectl get pods nginx-deploy-5bf87f5f59-bgzl7 -o yaml
# 大部分資源配置清單
Apiversion:group/versi on # Kubectl api-versions 所屬群組
kind: 資源類別
metadata:元數據
Name:名稱唯一
Namespace:名稱空間
Labels:標簽
Annotations:
SelfLink: /api/GROUP/VERSION/namespaces/NAMESPACE_NAME/TYPE/NAME
spec: 期望狀態 disired state
status: 讓當前狀態 current state 本字段由kubernetes集群維護
kubectl explain pods 內嵌說明
Kubectl explain pods.spec
Yaml文件 # 創建 apiVersion: v1 kind: Pod metadata: name: pod-demo namespace: default labels: app: myapp tier: frontend spec: containers: - name: myapp image: nginx - name: busybox image: busybox:latest command: - "/bin/sh" - "-c" - "sleep 3500"
kubectl create -f pod-demo.yaml # 創建pod
kubectl exec -it pod-demo -c myapp -- /bin/sh # 進入pod
Kubectl delete -f pod-demo.yaml # 刪除pod
Pod資源:
spec.containers <[]object>
- name <string> Image <string> imagePullPolicy <string> # Always拉取最新的,Never 本地沒有不拉取,if本地沒有再拉取 Always, Never 鏡像中默認的應用: command,args
標簽: key=value Key: 字母 數字 _ 開頭、 Value: 可為空 字母數字
# 標記標簽
Kubectl label pods pod-demo release=canary
# 修改標簽
Kubectl label pods pod-demo release=stable --overwrite
# 選擇標簽
Kubectl get pods -l release
標簽選擇器
等值關系 Kubectl get pods -l release=stable,app=myapp
集合關系 -l “release notin (canary,beta,alpha)”
許多資源支持內嵌字段
matchLabels: 直接給定鍵值
matchExpressions: 基於給定的表達式來使用選擇器
In,Notin:values
Exists,NotExists:values指必須為空列表
nodeSelector <map[string]string>
節點標簽選擇器
kebectl label nodes node_name disktype=ssd
Cat >>nginx-deploy.yaml<< EOF
nodeSelector:
Disktype: ssd
EOF
Annotations:
與label不同的地方在於不能用於挑選資源對象 僅用於為對象提供元數據
Pod生命周期
狀態:pending 已經創建 但是沒有適合配置的節點
Running 運行狀態
Failed 失敗......
創建Pod
Pod生命周期中重要行為:
初始化容器
容器探測
Liveness
Readiness
RestartPolicy:
Always, OnFailure, Never
探針類型三種
ExecAction、TcpsocketAction、HttpGetAction
# kubectl explain pod.spec.containers.livenessProbe
HTTPGET apiVersion: v1 kind: Pod metadata: name: liveness-httpget-pod namespace: default spec: containers: - name: liveness-httpget-container image: ikubernetes/myapp:v1 imagePullPolicy: IfNotPresent ports: - name: http containerPort: 80 livenessProbe: httpGet: port: 80 path: /index.html initialDelaySeconds: 1 periodSeconds: 3 文件檢查 EXEC apiVersion: v1 kind: Pod metadata: name: liveness-exec-pod namespace: default spec: containers: - name: liveness-exec-container image: busybox:latest imagePullPolicy: IfNotPresent command: ["/bin/sh","-c","touch /tmp/healthy; slepp 30; rm -rf /tmp/healthy; sleep 3600"] livenessProbe: exec: command: ["test","-e","/tmp/healthy"] #restartPolicy: initialDelaySeconds: 1 periodSeconds: 3
# pods yaml回顧
apiVersion, kind, metadata, spec statu(只讀)
Spec:
containers
nodeSelector
nodeName
restartPolicy:
Always,Never,OnFailure
containers:
name
image
imagePullPolicy
Ports:
name
containerPort
livenessProbe
readinessProbe
liftcycle
ExecAction: exec
TCPSocketAction: tcpSocket
HTTPGetAction: httpGet
Pod控制器
ReplicaSet: 控制副本數量 支持滾動更新
Deployment: 工作在ReplicaSet上 滾動更新回滾 聲明
Daemon: 每個節點只運行一個POD副本 系統級守護進程
Job:一次性任務
Cronjob: 周期性JOB
StatefulSet: 有狀態服務
kubectl edit rs myapp
Kubectl explain deploy
# 打補丁 更新
kubectl apply -f deploy-demo.yaml
Kubectl set image deployment myapp-deploy myapp=ikubernetes/myapp:v3
Kubectl path deployment myapp-deploy -p ‘{“spec”:{“strategy”:”{“rollingUpdate”:{“maxsurge”:1,”maxUnavailable”:0}}}}’
# 回滾
kubectl get deployment -o wide
kubectl rollout history deployment
rollout undo deployment myapp-deploy --to-revision=1
