上一篇文章中,我們一創建了一個簡單的 K8S 集群,https://www.cnblogs.com/klvchen/p/9553499.html
這里我們開始使用 kubectl 命令來創建應用,下面創建的 pod ,service 的 ip 地址范圍是我們創建 K8S 集群中時所指定的 (kubeadm init --kubernetes-version=v1.11.1 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap)
pod 地址范圍為 10.244.0.0/16
service 地址范圍為 10.96.0.0/12
創建 deployment
# 通過 kuectl run 命令來創建一個 deployment
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --dry-run=true

nginx-deploy 是我們創建 deployment 的名字
--image : 指定使用的鏡像
--port=80 :容器暴露的端口,該端口只能在 K8S 集群中訪問
-dry-run=true : 檢測語法是否錯誤,不會正在創建
# 創建 nginx-deploy
kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80
# 查看 deployment
kubectl get deployment

# 查看 pod
kubectl get pods 或 kubectl get pods -o wide

這里我們可以使用 K8S 集群中任意一台服務器訪問 curl 10.244.2.2 獲得 nginx 的內容
刪除 pod
# kubectl delete 刪除 pod
kubectl delete pods nginx-deploy-5b595999-zp4b4

當我們再查看時,發現 pod 刪除后自動再創建了,而且所在的節點也改變了,對應的 pod 的 ip 也改變了

創建 service
上面 pod 刪除后重新創建,ip地址會發生改變,為解決這問題,我們使用 service
kubectl expose deployment nginx-deploy --name=nginx --port=80 --protocol=TCP
# 查看 service
kubectl get svc
# 取得確認對象的詳細信息
kubectl describe svc nginx
# 可以通過 edit 把 ClusterIP 改成 NodePort,然后通過所有的物理機IP進行訪問
kubectl edit svc nginx

我們使用集群中的任何服務器訪問 curl 10.98.120.192 獲得 nginx 的內容,即使 pod 刪除后再重建
刪除 nginx-deploy , nginx
kubectl delete deployment nginx-deploy
kubectl delete svc nginx
擴容縮容Pod的操作
# 重新創建一個 pod
kubectl run myapp --image=ikubernetes/myapp:v1 --port=80
# 創建 service
kubectl expose deployment myapp --name=myapp --port=80
kubectl get svc

訪問 service myapp

# 執行擴容縮容Pod的操作
kubectl scale --replicas=5 deployment myapp
kubectl get pods -o wide

升級鏡像
# 通過 kubectl set image 升級鏡像
kubectl set image deployment myapp myapp=ikubernetes/myapp:v2
# 再次訪問 service ip
curl 10.110.3.25

恢復到上一個版本
# 恢復上一個版本的鏡像
kubectl rollout undo deployment myapp
kubectl rollout status deployment myapp
# 再次訪問 service ip
curl 10.110.3.25

查看標標簽
kubectl get pods --show-labels

service 是根據 pod 的標簽來進行管理
添加標簽
# 添加 release 標簽,值為 stable
kubectl label pods myapp-6865459dff-445x2 release=stable
標簽選擇器
kubectl get pods -l release!=stable
kubectl get pods -l "release in (stable,beta,alpha)"
kubectl get pods -l "release notin (stable,beta,alpha)"
節點的標簽
# 獲取節點的標簽
kubectl get nodes --show-labels
# 添加節點的標簽
kubectl label nodes node1 disktype=ssd
# 刪除節點的標簽
kubectl label nodes node1 disktype-
