antony@notes:~/kubernetes$ cat "k8s產生pods的過程.md"
k8s產生pods的過程
k8s產生pods的過程

- k8s叢集中,只要是能產生pod的工作機(worker node) 都會有kubelet ,負責產生pod,並告知CRI-O協助產生container,最後由runc產生container
- 每一個 node(m1、w1、w2) 都有 kubelet 在背景執行
可以由
ps aux |grep kubelet得知 ps. 而且是一開機就執行 (sudo rc-update add kubelet default) - pod是由 kubelet(daemon) 產生的
- containers 是由 kubelet(daemon) → cri-o → runc 產生的 by 子謙
把睡夢羅漢的版本換成3.2
bigred@m1:~$ sudo podman images | grep api
k8s.gcr.io/kube-apiserver v1.22.2 e64579b7d886 5 weeks ago 130 MB
bigred@m1:~$ sudo podman images | grep pause
k8s.gcr.io/pause 3.5 ed210e3e4a5b 7 months ago 690 kB- k8s版本代號V1.22.2搭配的pause(睡夢羅漢)版本是3.5。
bigred@m1:~$ sudo podman pull k8s.gcr.io/pause:3.2
- 下載3.2版本睡夢羅漢的image。
bigred@m1:~$ sudo nano /etc/containers/containers.conf
- 進去以後,alt+shift+3 開啟行數,到第335行("#
infra_image = "k8s.gcr.io/pause:3.4.1"")版本改成3.2,m1、w1和w2都要做設定。
Liveness Probe - Exec
$ echo 'apiVersion: v1
kind: Pod
metadata:
name: liveness-exec
spec:
containers:
- name: liveness
image: k8s.gcr.io/busybox
args:
- /bin/sh #只用sh來run下面的命令,不用互動
- -c #此及下一行是補充給/bin/sh的參數,/bin/sh –c=command,接續欲執行的命令
- touch /tmp/healthy; sleep 20; rm -rf /tmp/healthy; sleep 300 #睡完container結束
livenessProbe: #給kubelet看,叫他來偵測(執行
exec:
command: #要run來確認pod生死的命令
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5 '> exec-liveness.yml- yaml 沒有順序的問題,這些全部都是一起進去的參數,不是直譯式。
livenessProbe:
exec:
command:
- cat
- /tmp/healthy #檢查 /tmp/healthy在不在
initialDelaySeconds: 5 #發呆5秒
periodSeconds: 5 #每5秒回去pod檢查一次,,kubelet判讀pod消亡會重建上面這段是cubelet在執行
Readiness Probe - TCP
$ echo 'apiVersion: v1
kind: Pod
metadata:
name: tcp-readiness
spec:
containers:
- name: tcp-readiness
image: quay.io/cloudwalker/busybox
stdin: true
tty: true
args:
- /bin/sh
- -c
- sleep 20; timeout 20s nc -l localhost -p 9999; sleep 60; nc -l localhost -p 9999 #timeout 20s 是只給大肥貓20秒
ports:
- containerPort: 9999
readinessProbe:
tcpSocket:
port: 9999
initialDelaySeconds: 5
periodSeconds: 5 ' >tcp-readiness.ymlAssigning Pods to Namespace
- 把這台新建的pod加到myring這個namespace裡面
$ echo 'apiVersion: v1
kind: Pod
metadata:
name: n1
namespace: myring #這行
labels:
name: n1
spec:
hostname: n1
containers:
- image: quay.io/cloudwalker/busybox
command:
- sleep
- "3600"
name: n1 ' > pod-n1.yamlbigred@m1:~$ kubectl apply -f pod-n1.yaml
Error from server (NotFound): error when creating "pod-n1.yaml": namespaces "myring" not found- 失敗的原因是因為系統找不到myring的namesapce。
bigred@m1:~$ kubectl create namespace myring
namespace/myring created- 先創一個myring的namesapce。
bigred@m1:~$ kubectl apply -f pod-n1.yaml
pod/n1 created
bigred@m1:~$ kg pods -n myring
NAME READY STATUS RESTARTS AGE
n1 1/1 Running 0 2m23s- 如果只有打
kg pods會找不到,因為這個命令式在deafault namespace裡面找,後面要多加-n myring才能看到新建的pod。

- 可以在同一個 k8s 叢集中,新增出隔離環境給不同的使用者使用
- 並且
namespace可以設定firewall阻隔之間的網路傳輸 (v1.2x 後才有的) - 可以針對
namespace來限制硬體資源 (CPU,memory) 等
