<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pod是kubernetes中最小的單元,由一組、一個或多個容器組成,每個pod中包含了一個pause容器。
pause容器是pod的父容器,主要負責殭屍程序的回收管理,通過pause容器可以使同一個pod中多個容器共用儲存、網路、PID、IPC等,同一個Pod中多容器間存取僅通過localhost就可以通訊。
將有強依賴性的容器放在同一個Pod裡,例如要求低延遲性,容器A與容器B之間檔案上的聯絡等,引入Pod的概念是可以提高效能、便於管理。
從k8s角度說,docker是容器,但是容器卻不只是docker,引入pod可以使容器間工作更協調。
下面這個yaml檔案可能複製有問題,你也可以使用下面命令生成一個yaml檔案作為模板進行修改:
kubectl create deployment nginx --image=nginx -o yaml --dry-run=client >nginx.yaml
apiVersion: v1 # 必選,API的版本號 kind: Pod # 必選,型別Pod metadata: # 必選,後設資料 name: nginx # 必選,符合RFC 1035規範的Pod名稱 # namespace: default # 可選,Pod所在的名稱空間,不指定預設為default,可以使用-n 指定namespace labels: # 可選,標籤選擇器,一般用於過濾和區分Pod app: nginx role: frontend # 可以寫多個 annotations: # 可選,註釋列表,可以寫多個 app: nginx spec: # 必選,用於定義容器的詳細資訊 # initContainers: # 初始化容器,在容器啟動之前執行的一些初始化操作 # - command: # - sh # - -c # - echo "I am InitContainer for init some configuration" # image: busybox # imagePullPolicy: IfNotPresent # name: init-container containers: # 必選,容器列表 - name: nginx # 必選,符合RFC 1035規範的容器名稱 image: nginx:1.15.2 # 必選,容器所用的映象的地址 imagePullPolicy: IfNotPresent # 可選,映象拉取策略, IfNotPresent: 如果宿主機有這個映象,那就不需要拉取了. Always: 總是拉取, Never: 不管是否儲存都不拉去 command: # 可選,容器啟動執行的命令 ENTRYPOINT, arg --> cmd - nginx - -g - "daemon off;" workingDir: /usr/share/nginx/html # 可選,容器的工作目錄 # volumeMounts: # 可選,儲存卷設定,可以設定多個 # - name: webroot # 儲存卷名稱 # mountPath: /usr/share/nginx/html # 掛載目錄 # readOnly: true # 唯讀 ports: # 可選,容器需要暴露的埠號列表 - name: http # 埠名稱 containerPort: 80 # 埠號 protocol: TCP # 埠協定,預設TCP env: # 可選,環境變數設定列表 - name: TZ # 變數名 value: Asia/Shanghai # 變數的值 - name: LANG value: en_US.utf8 # resources: # 可選,資源限制和資源請求限制 # limits: # 最大限制設定 # cpu: 1000m # memory: 1024Mi # requests: # 啟動所需的資源 # cpu: 100m # memory: 512Mi # startupProbe: # 可選,檢測容器內程序是否完成啟動。注意三種檢查方式同時只能使用一種。 # httpGet: # httpGet檢測方式,生產環境建議使用httpGet實現介面級健康檢查,健康檢查由應用程式提供。 # path: /api/successStart # 檢查路徑 # port: 80 # readinessProbe: # 可選,健康檢查。注意三種檢查方式同時只能使用一種。 # httpGet: # httpGet檢測方式,生產環境建議使用httpGet實現介面級健康檢查,健康檢查由應用程式提供。 # path: / # 檢查路徑 # port: 80 # 監控埠 # livenessProbe: # 可選,健康檢查 #exec: # 執行容器命令檢測方式 #command: #- cat #- /health #httpGet: # httpGet檢測方式 # path: /_health # 檢查路徑 # port: 8080 # httpHeaders: # 檢查的請求頭 # - name: end-user # value: Jason # tcpSocket: # 埠檢測方式 # port: 80 # initialDelaySeconds: 60 # 初始化時間 # timeoutSeconds: 2 # 超時時間 # periodSeconds: 5 # 檢測間隔 # successThreshold: 1 # 檢查成功為2次表示就緒 # failureThreshold: 2 # 檢測失敗1次表示未就緒 # lifecycle: # postStart: # 容器建立完成後執行的指令, 可以是exec httpGet TCPSocket # exec: # command: # - sh # - -c # - 'mkdir /data/ ' # preStop: # httpGet: # path: / # port: 80 # exec: # command: # - sh # - -c # - sleep 9 restartPolicy: Always # 可選,預設為Always,容器故障或者沒有啟動成功,那就自動該容器,Onfailure: 容器以不為0的狀態終止,自動重啟該容器, Never:無論何種狀態,都不會重啟 #nodeSelector: # 可選,指定Node節點 # region: subnet7 # imagePullSecrets: # 可選,拉取映象使用的secret,可以設定多個 # - name: default-dockercfg-86258 # hostNetwork: false # 可選,是否為主機模式,如是,會佔用主機埠 # volumes: # 共用儲存卷列表 # - name: webroot # 名稱,與上述對應 # emptyDir: {} # 掛載目錄 # hostPath: # 掛載本機目錄 # path: /etc/hosts
apiserver
:定義API的版本號
kind
:建立資源型別,如pod、deployment等
metadata
:後設資料,如pod的一些基本資訊
spec
:用於定義容器的詳細資訊
執行yaml檔案建立Pod:
kubectl create -f pod.yaml
完成後檢視Pod:
kubectl get pod
注意:生產中基本不會直接使用pod進行部署,但是yaml檔案大同小異。需要熟悉yaml檔案的格式和設定項。
StartupProbe
:1.16版本後增加的探針方式,用於判斷容器內應用程式是否已經啟動,如果設定了StartupProbe,就會先禁止其他探測,直到成功,成功後將不在程序探測。
LivenessProbe
:用於探測容器是否執行,如果探測失敗,kubelet會根據設定的重啟策略進行相應的處理。若沒有設定該探針,預設就是success。
ReadinessProbe
:一般用於探測容器內的程式是否健康,它的返回值如果為success,那麼代表這個容器已經啟動成功,並且程式已經是可以接受流量的狀態。
以上探針均可設定以下方式:
ExecAction
:在容器內執行一個命令,如果返回值為0,則認為容器健康(類似於執行一個命令後,執行echo $?返回值為0代表成功是一樣的)
livenessProbe: exec: command: - cat - /tmp/health
TCPSocketAction
:通過TCP連線檢查容器內的埠是否通的,如果是通的則認為容器健康(類似於telnet 127.0.0.1 3306,執行成功的話判斷為容器健康)
livenessProbe: tcpSocket: port: 80
HTTPGetAction:通過應用程式暴露的API地址來檢查程式是否正常,如果狀態碼為200~400之間,則認為容器健康。(生產使用最多)
livenessProbe: httpGet: path: /status/health port: 80
探針檢查的幾個引數:
initialDelaySeconds
:初始化時間(比如程式啟動慢,我要多少秒後才會檢查)
timeoutSeconds
:超時時間(1-2秒)
periodSeconds
:檢測間隔,多長時間檢測一次(5秒)
successThreshold
:檢測成功次數,比如檢測成功幾次代表就緒(1-2次)
failureThreshold
:檢測失敗次數,比如檢測失敗幾次代表未就緒(2次)
重啟策略:timeoutSecondsperiodSecondsfailureThreshold
我們可以看以下coredns的探針設定:
# 檢視pod名稱 [root@k8s-master01 ~]# kubectl get deployment -n kube-system coredns 1/1 1 1 5d18h # 線上編譯coredns的yaml檔案 [root@k8s-master01 ~]# kubectl edit deployment coredns -n kube-system livenessProbe: failureThreshold: 5 httpGet: path: /health port: 8080 scheme: HTTP initialDelaySeconds: 60 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 5 # 上面代表請求8080的/health介面,如果存取成功則保留容器不會被殺死 readinessProbe: failureThreshold: 3 httpGet: path: /ready port: 8181 scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 # 上面設定代表請求8181的/ready介面成功,說明容器可以正常開始工作了
Prestop:先去請求eureka介面,把自己的IP地址和埠號,進行下線,eureka從登入檔中該應用的IP地址。然後容器進行sleep 90,kill ‘程序’;(注意90不是確定值,而是根據實際情況進行變化的)
以上就是kubernetes k8s入門定義一個Pod的詳細內容,更多關於k8s入門定義Pod的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45