pod是k8s的最小單位
pod是一組容器的集合
pod控制器監控一組容器的運行狀態(動態移除、添加容器)
service
通過暴露(以ip加端口的方式),實現客戶端對pod服務的訪問。
有狀態服務
系統運行過程中必須實時存在的服務,如DB,隨意的移走會造成數據遺失。
無狀態服務
系統運行過程中允許暫時更替的服務,如Apache,可隨意更替功能配置相同服務的Apache
調度器
控制任意的pod運行在任意的節點
集羣安全機制
集羣的認證、鑑權、訪問控制、原理及其流程
helm
類似yum、apt等軟件安裝工具,實現一條命令部署一個集羣。
k8s架構圖
scheduler將處理數據交給api server,api server將數據保存在etcd下。
高可用集羣副本的數量建議是大於3的奇數
- api server
一切服務的訪問入口,核心 - scheduler
接收任務,並分配任務到合適的節點(按節點資源分配) - replication controller
維持副本數量達到期望值。 - etcd
保存數據,以鍵值對方式存儲。可信賴的分佈式鍵值存儲服務。
保存能夠維持分佈局集羣持久穩定運行的配置文件信息。集羣異常時可通過etcd存儲的數據恢復。
v3 : 將數據保存在本地持久化捲上(建議)
v2 : 將數據保存在本地內存中(k8s1.11已棄用),若遇到,需定期手動數據備份
- kubelet
控制docker服務,創建容器,維持pod的生命週期。CRI(container runtime interface)。直接與容器引擎進行交互。 - kube proxy
實現客戶端對服務資源的訪問、實現pod集羣的負載均衡。藉助Firewalls防火牆實現。通過添加規則到iptables或ip_vs,實現服務的映射訪問或負載均衡。
常見插件
CoreDNS
可以爲集羣中的SVC創建一個A記錄(域名-ip的對應關係解析),實現通過域名對pod的訪問。
Dashboard
爲k8s集羣提供一個B/S結構的訪問體系
INGRESS CONTROLLER
實現七層代理,即實現基於域名的負載均衡
FEDERATION
提供一個可以跨集羣中心的多k8s的統一管理功能
Prometheus
提供一個k8s集羣的監控能力
EFK
提供一個k8s集羣日誌統一分析接入平臺
Pod
概念
Pod管理一組容器(如一個LAMP環境,Apache容器+MySQL容器+PHP容器)
Pod啓動時,首先產生(啓動)一個默認的容器(名稱爲pause)。
同一個Pod內的一組容器共用pause的網絡棧及存儲卷。因此,同一個Pod內的一組容器間可通過localhost:port端口的方式互通訪問資源,就好像在同一個容器內一樣。
因此,同一個Pod內的一組容器之間端口不能相同(會衝突)。
同一個Pod內的一組容器,即共享網絡又共享存儲卷。
-
自主式Pod
非控制器管理的Pod,Pod一旦死亡不會被拯救、重置,而是放任不管。 -
控制器管理的Pod
Pod控制器類型
ReplicationController & ReplicaSet & Deployment
- ReplicationController
用來確保容器應用的副本數始終保持在用戶定義的副本數,即如果有容器異常退出,則會自動創建新的Pod代替,且因爲異常多出來的容器也會自動回收。
新版本的kubernetes中建議使用ReplicaSet來取代ReplicationController - ReplicaSet
ReplicaSet與ReplicationController沒有本質的不同,只是名字不一樣,且ReplicaSet支持集合式的selector
雖然ReplicaSet可以獨立使用,但一般還是建議使用Deployment來自動管理ReplicaSet,這樣就無需擔心跟其他機制的不兼容問題(比如ReplicaSet不支持rolling-update,但Deployment支持) - Deployment
Deployment通過操控ReplicaSet實現容器的添加、刪除等操作。
Deployment通過創建ReplicaSet達到創建Pod的目的。
HPA(HorizontalPodAutoScale)
Horizontal Pod Autoscaling 僅適用於Deployment和ReplicaSet,在V1版本中僅支持根據Pod的CPU利用率擴、縮容;在vlalpha版本中,支持根據內存和用戶所定義的metric擴、縮容
StatefullSet
StatefulSet是爲了解決有狀態服務的問題(對應Deployments和ReplicaSets是爲了無狀態服務而設計),其應用場景包括:
- 穩定的持久化存儲,即Pod重新調度後還是能訪問到相同的持久化數據,基於PVC實現
- 穩定的網絡標誌,即Pod重新調度後其PodName和HostName不變,基於Headless Service(即沒有Cluster IP的service)來實現
- 有序部署、有序擴展,即Pod是有順序的,在部署或者擴展的時候要根據定義的順序依次進行(即從0到N-1,在下一個Pod運行之前,所有之前的Pod都必須已經是Running和Ready狀態),基於init containers來實現。
- 有序收縮,有序刪除(即從N-1到0)
DaemonSet
DaemonSet確保全部(或者一些)Node上運行一個(有且只有一個)Pod的副本。當有Node加入集羣時,也會爲他們新增一個Pod。當有Node從集羣移除時,這些Pod也會被回收。刪除DaemonSet將會刪除它創建的所有Pod
使用DaemonSet的一些典型用法:
- 運行集羣存儲daemon,例如在每個Node上運行glusterd、ceph
- 在每個Node上運行日誌收集daemon,例如fluentd、logstash
- 在每個Node上運行監控daemon,例如Prometheus Node Exporter
Job,Cronjob
Job負責批處理任務,即僅執行一次的任務,它保證批處理任務的一個或多個Pod成功結束
通過監控任務是否正常執行結束和退出,確保任務一定成功的執行結束
CronJob 管理基於時間的Job,即:
- 在給定的時間點運行且僅運行一次
- 週期性在給定的時間點運行
服務發現
如何確保一些Pod屬於同一組的Pod?同一組的Pod具有相干性,如同屬於同一個Deployment所創建、或擁有同一組的標籤等,同一組Pod具備相干性後,就容易被service所收集並劃分成同一組。
service收集Pod是通過標籤實現的。
service幫助Pod映射出IP和端口,實現客戶端對Pod服務的使用
service支持RR(輪詢)算法。
網絡通訊方式
Kubernetes的網絡模型假定了所有Pod都在一個可以直接連通的扁平(對於所有的Pod,均可以通過對方的ip直接到達)的網絡空間中,這在GCE(Google Compute Engine)裏面是現成的網絡模型,Kubernetes假定這個網絡已經存在。而在私有云裏搭建Kubernetes集羣,就不能假定這個網絡已經存在了。我們需要自己實現這個網絡假設,將不同節點上的docker容器之間的互相訪問先打通,然後運行kubernetes。
k8s如何實現網絡通訊
同一個Pod內的多個容器之間通訊:通過共用pause容器內的網絡棧實現,通過網絡棧的IO實現。同一個Pod共享同一個網絡命名空間,共享同一個Linux協議棧。
各Pod之間的通訊:通過overlay Network 實現。以Pod1和Pod2爲例,若Pod1與Pod2不在同一臺主機,Pod的地址是與docker0在同一個網段的,但docker0網段與宿主機網卡是兩個完全不同的IP網段並且不同Node之前的通信只能通過宿主機的物理網卡進行。將pod的IP與所在Node的IP關聯起來,通過這個關聯讓Pod可以互相訪問。若Pod1與Pod2在同一臺機器,則由docker0網橋直接轉發請求至Pod2,因此不需要經過Flannel。
Pod和Service之間的通訊:通過各節點的IPtables規則實現,目前以LVS的轉發和維護爲主。
Pod到外網:Pod向外網發送請求,查找路由表,轉發數據包到宿主機的網卡,宿主機網卡完成路由選擇後,iptables執行Masquerade,把源IP更改爲宿主網卡的IP,然後向外網服務器發送請求。(SNAT)
外網訪問Pod:通過service實現
Flannel如何運行
Flannel是CoreOS團隊針對Kubernetes設計的一個網絡規劃服務,簡單來說,他的功能是讓集羣中的不同節點主機創建的Docker容器都具有全集羣唯一的虛擬IP地址。而且它還能在這些IP地址之間建立一個覆蓋網絡(overlay Network),通過這個覆蓋網絡,將數據包原封不動的傳遞到目標容器內。
Flanneld:守護進程,會持續的監聽特定端口,目標端口用於接收、轉發數據包。Flanneld啓動時會創建一個網橋Flannel0 10.1.15.0/16,網橋Flannel0專門用於收集Docker0送出的數據並實現數據包的二次封裝,Flanneld使用UDP類型的數據報文轉發數據。Docker0會爲對應的Pod分配ip地址,
etcd的作用
ETCD之Flannel提供說明:
- 存儲管理Flannel可分配的IP地址段資源
- 監控ETCD中每個Pod的實際地址,並在內存中建立維護Pod節點路由表
網絡類型
service和pod網絡均爲虛擬網絡;節點網絡屬於物理網絡。
k8s集羣的部署
如上圖所示,當前的k8s集羣由一個master主服務和和兩個node工作節點組成。
Harbor爲私有鏡像倉庫
Router爲軟路由(部署koolshare服務)
建議操作系統版本不低於CentOS7或內核版本在3.1以上
部署koolshare
部署Harbor
部署master節點
配合IP地址:192.168.66.10
#網卡的最新規範,其會從BIOS的pcre通道內獲取網卡的最新信息.若沒有,可再找eth0配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#設置IP地址爲靜態IP地址,如192.168.66.10、20、21
設置系統主機名及host文件
hostnamectl set-hostname k8s-master01
#配置hosts文件,暫時寫死IP-域名
vim /etc/hosts
192.168.66.10 k8s-master01
192.168.66.20 k8s-node01
192.168.66.21 k8s-node02
#將hosts文件通過scp命令發送到另外兩個node節點
scp /etc/hosts root@k8s-node01:/etc/hosts
scp /etc/hosts root@k8s-node02:/etc/hosts
安裝軟件包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
設置防火牆爲iptables並設置空規則
#關閉firewalld&&關閉自啓動&&安裝iptables-service管理工具&&啓動iptables&&設置iptables爲開機自啓&&清空iptables防火牆規則&&保存iptables防火牆規則
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
關閉SELINUX
#關閉虛擬內存&&永久關閉虛擬內存。避免出現容器運行在虛擬內存的意外情況。
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
#
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
調整內核參數,對於K8S
cat > kubernetes.conf << EOF
#開啓網橋模式
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用swap空間,只有當系統OOMM時才允許使用它
vm.overcommit_memory=1 # 不檢查物理內存是否夠用
vm.panic_on_oom=0 # 開啓 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
#關閉ipv6協議
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
#複製文件到/etc/sysctl.d/目錄下,實現文件開機被調用
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
#令配置文件生效
sysctl -p /etc/sysctl.d/kubernetes.conf
調整系統時區
#設置系統時區爲 中國/上海
timedatectl set-timezone Asia/Shanghai
#將當前的UTC時間寫入硬件時鐘
timedatectl set-local-rtc 0
#重啓依賴於系統時間的服務
systemctl restart rsyslog
systemctl restart crond
關閉系統不需要服務
systemctl stop postfix && systemctl disable postfix
設置rsyslogd和systemd journald
mkdir /var/log/journal # 持久化保存日誌的目錄
mkdir /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/99-prophet.conf << EOF
[Journal]
# 持久化保存到磁盤
Storage=presistent
# 壓縮歷史日誌
Compress=yes
SyncIntervalSec=5m
RateLimitInterval=30s
RateLimitBurst=1000
# 最大佔用空間 10G
SystemMaxUse=10G
# 單日誌文件最大 200M
SystemMaxFileSize=200M
# 日誌保存時間 2周
MaxRetentionSec=2week
# 不將日誌轉發到 syslog
ForwardToSyslog=no
EOF
systemctl restart systemd-journald
升級系統內核爲4.44
CentOS 7.x系統自帶的3.10.x內核存在一些bug,導致運行的Docker、Kubernetes不穩定,例如: rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#採用elrepo源的安裝方式,安裝4.44版本內核
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#安裝完成後檢查/boot/grub2/grub.cfg中對應內核menuentry中是否包含initrd16配置,如果沒有,再安裝一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
#設置開機從新內核啓動
grub2-set-default "CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)"
#重啓服務器
reboot
#檢測內核版本是否爲4.44
uname -r
kube-proxy開啓ipvs的前置條件
modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash
/etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
安裝docker軟件
# 安裝依賴
yum install -y yum-utils device-mapper-persistent-data lvm2
# 導入阿里雲的docker-ce的鏡像倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update -y && yum install -y docker-ce
# 此時系統內核版本應該已經不是4.44了,重新設置系統內核版本並重啓服務器
grub2-set-default "CentOS Linux (4.4.182-1.el7.elrepo.x86_64) 7 (Core)" && reboot
#啓動docker並設置爲開機自啓動
systemctl start docker && systemctl enable docker
# 創建 /etc/docker 目錄
mkdir /etc/docker
# 配置daemon
cat > /etc/docker/daemon.json << EOF
{
"exec-opts" : ["native.cgroupdriver=systemd"],
"log-driver" : "json-file",
"log-opts" : {
"max-size" : "100m"
}
}
EOF
# 創建目錄存放docker生成的配置文件
mkdir -p /etc/systemd/system/docker.service.d
# 重啓docker服務
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
安裝kubeadm(主從配置)
cat << EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum -y install kubeadm-1.15.1 kubectl-1.15.1 kubelet-1.15.1
systemctl enable kubelet.service
# rz上傳準備好的鏡像文件
# 解壓鏡像文件
tar -zxvf kubeadm-basic.images.tar.gz
# 編寫腳本讀取鏡像生成容器
vim load-images.sh
#!/bin/bash
ls /root/kubeadm-basic.images > /tmp/image-list.txt
cd /root/kubeadm-basic.images
for i in $( cat /tmp/image-list.txt )
do
docker load -i $i
done
rm -rf /tmp/image-list.txt
chmod a+x load-images.sh
./load-images.sh
#複製鏡像和腳本到兩個節點並加載鏡像爲容器
scp -r kubeadm-basic.images load-images.sh root@k8s-node01:/root/
scp -r kubeadm-basic.images load-images.sh root@k8s-node02:/root/
初始化主節點
#顯示默認的init文件並打印至kubeadm-config.yaml文件中
kubeadm config print init-defaults > kubeadm-config.yaml
vim kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers: kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.66.10
bindPort: 6443
--snip--
kubernetesVersion: v1.15.1
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: 10.96.0.0/12
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs #設置默認調度方式爲ip_vs方式
#初始化安裝,指定配置文件,頒發證書 |
kubeadm init --config=kubeadm-config.yaml --experimental-upload-certs | tee kubeadm-init.log
# 檢查日誌
cat kubeadm-init.log
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
#檢查都有哪些節點
kubectl get node
加入主節點以及其餘工作節點
#執行安裝日誌中的加入命令即可
部署網絡
kubectl apply -f
https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f kube-flannel.yml
kubectl get pod -n kube-system
# 此時kube-flannel組件已經成功運行了
kubectl get node
# 此時node節點已經處於ready狀態了
在node分節點執行以下命令(在kubeadm-init.log日誌文件中查看)加入node主節點
kubeadm join 192.168.66.10:6443 --token abcedf.0123456789abcdef --discovery-token-ca-cert-hash sha256:51e4c51e4c51e4c51e4c51e4clll
部署node節點
配合IP地址:192.168.66.20
#網卡的最新規範,其會從BIOS的pcre通道內獲取網卡的最新信息.若沒有,可再找eth0配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#設置IP地址爲靜態IP地址,如192.168.66.10、20、21
設置系統主機名及host文件
hostnamectl set-hostname k8s-node01
安裝軟件包
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git
設置防火牆爲iptables並設置空規則
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables && iptables -F && service iptables save
關閉SELINUX
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
部署私有鏡像倉庫harbor
配置docker配置文件
vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"insecure-registries": ["https://hub.atguigu.com"]
}
# 重啓docker生效
systemctl restart docker
由於此處使用的是自制證書,因此需要在每個物理機的daemon.json文件中配置““insecure-registries”: [“https://hub.atguigu.com”]”,聲明私有docker鏡像倉庫是安全的
# 上傳docker-compose
mv docker-compose /usr/local/bin/
chmod a+x /usr/local/bin/docker-compose
tar -zxvf harbor-offline-installer-v1.2.0.tgz
cd /usr/local/harbor
vim harbor.cfg
# 創建存儲證書目錄
mkdir -p /data/cert
# 創建https證書以及配置相關目錄權限
openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key --out server.csr
cp server.key server.key.org
openssl rsa --in server.key.org --out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
mkdir /data/cert
chmod -R 777 /data/cert
# 運行腳本進行安裝
cd /usr/local/harbor/
./install.sh
# 在每臺物理機上固化域名解析
echo "192.168.66.100 hub.atguigu.com" >> /etc/hosts
客戶端使用瀏覽器打開hub.atguigu.com訪問測試,查看鏡像倉庫
docker 訪問私有鏡像倉庫
docker login https://hub.atguigu.com
# 下載鏡像
docker pull wangyanglinux/myapp:v1
# 自定義鏡像標籤
docker tag wangyanglinux/myapp:v1 hub.atguigu.com/library/myapp:v1
# 推送鏡像到私有鏡像倉庫
docker push hub.atguigu.com/library/myapp:v1
k8s集羣從私有鏡像倉庫下載鏡像
# 啓動一個pod,
kubectl run nginx-deployment --image=hub.atguigu.com/library/myapp:v1 --port=80 --replicas=1
kubectl get deployment
kubectl get rs
kubectl get pod -o wide
# 訪問容器測試
curl 10.244.2.2
# 增加期望運行副本數
kubectl scale --replicas=3 deployment/nginx-deployment
kubectl expose deployment nginx-deployment --port=30000 --target-port=80
kubectl get svc
# 暴露 pod 的訪問端口
kubectl edit svc nginx-deployment
type: NodePort
kubectl get svc
# 此時客戶端可以通過暴露的端口訪問node內服務
–replicas=1 : 副本數爲1
資源清單
k8s中的資源
名稱空間級別
僅在此名稱空間下失效。
工作負載型資源(workload):
Pod,ReplicaSet,Deployment.StatefulSet,DaemonSet,Job,CronJob(ReplicationController 在v1.11版本被廢棄)
服務發現及負載均衡資源(ServiceDiscovery LoadBalance):
Service,Ingress,
配置與存儲型資源:
Volume(存儲卷),CSI(容器存儲接口,可以擴展各種各樣的第三方存儲卷)
特殊類型的存儲卷:
configMap(當配置中心來使用的資源類型),Secret(保存敏感數據),DownwardAPI(把外部環境中的信息輸出給容器)
集羣級資源
NameSpace,Node,Role,ClusterRole,RoleBinding,ClusterRoleBinding
元數據型資源
HPA,PodTemplate,LimitRange
根據一些指標去進行一定的操作
資源清單
含義
在k8s中,一般使用yaml格式的文件來創建符合我們預期期望的pod,這樣的yaml文件我們一般稱爲資源清單
常用字段解釋說明
pod模板
vim pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
namespace: default
labels:
app: myapp
version: v1
spec:
containers:
- name: app
image: hub.atguigu.com/library/myapp:v1
# 創建pod
kubectl create -f pod.yaml
# 查看pod
kubectl get pod
容器生命週期
init C : 初始化容器,可以是零個或多個
init C 無法同時運行,只能運行完成結束一個再開始運行下一個。
init C 在pod生命週期的初始階段運行並結束。
pause(pod的基礎容器)在init C執行之前創建完成
main C : 主容器
readiness : 就緒檢測,確認主容器是否已經部署完成並運行
liveness : 生存檢測,確認主容器是否正常運行並提供服務(而未陷入假死狀態)
kubectl調用》api,api通過etcd調用》kubelet》調用CRI,創建型新容器》創建pause基礎容器》初始化容器(init C)
init容器
Pod能夠具有多個容器,應用運行在容器裏面,但是他也可能有一個或多個先於應用容器啓動的Init容器
Init 容器與普通的容器非常像,除了如下兩點:
- Init 容器總是運行到成功完成爲止
- 每個Init容器都必須在下一個Init容器啓動之前成功完成
如果Pod的Init容器失敗,kubernetes會不斷的重啓該Pod,直到Init容器成功爲止
如果Pod對應的restartPolicy爲Never,它不會重新啓動
Init容器的作用:
Init C 模板
Init C特殊說明:
Pod啓動的第一個容器是pause容器,並非init C容器
“網絡和數據卷初始化之後”指的是pause完成啓動之後
更改Pod的運行狀態:
# 查詢當前Pod的運行狀態
kubectl get pod
# 編輯目標Pod的運行狀態
kubectl edit pod myapp-pod
容器探針
探測方式:
如何實現探針: