目錄
一、應(yīng)用部署
二、編寫yaml文件
三、init容器
四、探針
1、存活探針
2、就緒探針
一、應(yīng)用部署
下載測試鏡像
docker pull yakexi007/myapp:v1
docker pull yakexi007/myapp:v2
docker tag yakexi007/myapp:v1 reg.westos.org/library/myapp:v1
docker tag yakexi007/myapp:v2 reg.westos.org/library/myapp:v2
docker push reg.westos.org/library/myapp:v1
docker push reg.westos.org/library/myapp:v2
創(chuàng)建自主式pod?(生產(chǎn)不推薦)
kubectl run demo --image=myapp:v1
kubectl get pod -o wide
查看pod詳情 及刪除
kubectl describe pod demo
kubectl delete pod demo
創(chuàng)建控制器(推薦)
kubectl create deployment myapp --image=myapp:v1 --replicas=3
控制器自動維護(hù)pod副本數(shù)
kubectl get pod
kubectl get deployments.apps
kubectl delete pod myapp-67984c8646-kgxl5
kubectl get deployments.apps
kubectl get pod
在遠(yuǎn)程pod中執(zhí)行命令
kubectl exec myapp-67984c8646-98zh4 -- ls /usr/share/nginx/html
擴(kuò)容pod數(shù)量
kubectl scale deployment myapp --replicas=6
kubectl get pod
縮容
kubectl scale deployment myapp --replicas=3
kubectl get pod
通過service暴露pod
kubectl expose deployment myapp --port=80 --target-port=80
查看svc詳情
kubectl describe svc myapp
curl 10.98.121.24
curl 10.98.121.24/hostname.html
service自動發(fā)現(xiàn)pod擴(kuò)容與縮容,自動更新endpoints,實(shí)現(xiàn)對應(yīng)用的負(fù)載均衡
service默認(rèn)使用clusterip類型,只能在集群中訪問
nodeport類型,可以在集群外部訪問
kubectl edit svc myapp
kubectl get svc
訪問集群任意節(jié)點(diǎn)+端口
curl 192.168.67.11:32209/hostname.html
curl 192.168.67.12:32209/hostname.html
curl 192.168.67.13:32209/hostname.html
更新應(yīng)用版本
kubectl set image deployment/myapp myapp=myapp:v2
curl 192.168.67.13:32209
查看應(yīng)用歷史版本
kubectl rollout history deployment myapp
回滾
kubectl rollout undo deployment myapp --to-revision=1
curl 192.168.67.11:32209
刪除應(yīng)用
kubectl delete deployments.apps myapp
kubectl delete svc myapp
kubectl get pod
集群通過namespace來做資源隔離,默認(rèn)操作的資源都指向default
kubectl get ns
二、編寫yaml文件
隨著微服務(wù)的使用,在linux上使用vim或者vi命令編輯yml文件的時(shí)候,會自動縮進(jìn),導(dǎo)致文件根本 無法使用。
解決辦法
粘貼前先執(zhí)行如下命令:?再粘貼的時(shí)候,里面的內(nèi)容就不再縮進(jìn)了,完美解決。
:set paste
mkdir pod
cd pod/
獲取幫助
kubectl explain pod.spec.containers
獲取yaml模板
kubectl run demo --image nginx --dry-run=client -o yaml > pod.yaml
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
containers:
- image: nginx
name: demo
imagePullPolicy: IfNotPresent
創(chuàng)建pod
kubectl create -f pod.yaml
查看詳情
kubectl get pod -o wide
kubectl describe pod demo
kubectl get pod demo -o yaml


vim pod.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
containers:
- image: nginx
name: demo
- image: redis:6.2.4
name: redis
kubectl apply -f pod.yml
kubectl describe pod

kubectl delete -f pod.yml
vim pod.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
containers:
- image: nginx
name: demo
imagePullPolicy: IfNotPresent
kubectl apply -f pod.yml
kubectl get pod demo -o yaml
kubectl delete -f pod.yml
3?資源限制
vim pod.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
containers:
- image: nginx
name: demo
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 1
memory: 200M
requests:
cpu: 0.5
memory: 100M
kubectl apply -f pod.yml
kubectl get pod demo -o yaml
Guaranteed,保證級別:Pod 中的容器都設(shè)置了 CPU 和 Memory 的 requests 和 limits,并且這些值相等。此時(shí),如果資源滿足所有 Guaranteed 類別的 Pod 的需求,則這些 Pod 會被同時(shí)調(diào)度在集群中,保證它們的運(yùn)行。
Burstable,突發(fā)級別:Pod 中至少有一個(gè)容器設(shè)置了 CPU 和 Memory 的 requests 和 limits,但是這些值不相等。此時(shí),如果資源足夠,那么這些 Pod 會被相應(yīng)地調(diào)度,但是它們的性能可能會受到限制,因?yàn)樗鼈兡軌蚴褂玫馁Y源是有上限的。
BestEffort,盡力級別:Pod 中的容器沒有設(shè)置 CPU 和 Memory 的 requests 和 limits。此時(shí),這些容器會盡力地獲取集群中未被占用的資源,但是它們的資源使用是無法保證的,因?yàn)樗鼈冃枰却褐幸逊峙涞乃匈Y源使用完畢才能夠獲得更多的資源。
4.端口映射
##有配置NodePort,外部流量可訪問k8s中的服務(wù)
vim pod.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
containers:
- image: nginx
name: demo
imagePullPolicy: IfNotPresent
ports:
- containerPort: 80
hostPort: 80
kubectl apply -f pod.yml
kubectl get pod -o wide
kubectl describe pod demo

vim pod.yml
cat pod.yml
apiVersion: v1
kind: Pod
metadata:
labels:
run: demo
name: demo
spec:
hostNetwork: true
nodeSelector:
kubernetes.io/hostname: k8s2
containers:
- image: nginx
name: demo
imagePullPolicy: IfNotPresent
kubectl apply -f pod.yml
kubectl describe pod demo
kubectl delete -f pod.yml
三、init容器
vim init-pod.yaml
cat init-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app.kubernetes.io/name: MyApp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh', '-c', "until nslookup myservice.default.svc.cluster.local; do echo waiting for myservice; sleep 2; done"]
kubectl apply -f init-pod.yaml
kubectl get pod

vim myservice.yaml
cat myservice.yaml
apiVersion: v1
kind: Service
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
kubectl apply -f myservice.yaml
kubectl get svc
svc解析成功后,init容器退出,主容器運(yùn)行
yum install -y bind-utils
dig -t A myservice.default.svc.cluster.local. @10.96.0.10
kubectl get pod
回收資源
kubectl delete -f init-pod.yaml
kubectl delete -f myservice.yaml
四、探針
1、存活探針
vim liveness-pod.yaml
cat liveness-pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: nginx
livenessProbe:
tcpSocket:
port: 8080
initialDelaySeconds: 3
periodSeconds: 3
在存活探針檢測失敗導(dǎo)致容器不斷被重啟
kubectl apply -f liveness-pod.yaml
kubectl get pod -w
kubectl describe pod liveness-http
kubectl delete -f liveness-pod.yaml

2、就緒探針
vim liveness-pod.yaml
cat liveness-pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-http
spec:
containers:
- name: liveness
image: nginx
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 3
periodSeconds: 3
readinessProbe:
httpGet:
path: /test.html
port: 80
initialDelaySeconds: 5
periodSeconds: 5
kubectl apply -f liveness-pod.yaml
就緒探針失敗導(dǎo)致容器一直未就緒
kubectl get pod
kubectl describe pod liveness-http
創(chuàng)建測試頁面
kubectl exec liveness-http -- touch /usr/share/nginx/html/test.html
就緒探針成功
kubectl get pod
創(chuàng)建svc
kubectl expose pod liveness-http --port 80 --target-port 80
就緒容器自動上線
kubectl describe svc liveness-http
刪除測試頁面
kubectl exec liveness-http -- rm /usr/share/nginx/html/test.html
就緒探針失敗,容器未就緒
kubectl get pod
在svc中容器自動下線
kubectl describe svc liveness-http

回收文章來源:http://www.zghlxwxcb.cn/news/detail-727510.html
kubectl delete -f liveness-pod.yaml
文章來源地址http://www.zghlxwxcb.cn/news/detail-727510.html
到了這里,關(guān)于Kubernetes的pod管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!