cd CNT.2022.v4.2

kg nodes

ks

投影片13 複製貼上
dir yaml
根據13頁, (spec) pod 裡多個 containers, 共用同一個網卡, 共用一個 pid namespace, 共用一個 hostname(電腦名稱), 接著宣告兩個Container, derby 跟 shell
kubectl create -f yaml/sharepid.yml 產生一個檔案 (-f)
雖然顯示 pod/sharepid created 但不一定真的有, 需再打 kubectl get pod 看目前狀態
kubectl get pod/sharepid -o jsonpath='{.spec.containers[*].name}';echo "" (-o ouput)
看 sharepid 裡面 container 的名稱 (為 shell 跟 derby)
kubectl exec sharepid -c shell -- hostname; kubectl exec sharepid -c derby -- hostname
看兩個 container 裡面 個別的主機名稱 (皆為 xyz)
kubectl exec sharepid -c shell -- hostname -i; kubectl exec sharepid -c derby -- hostname -i
(-i 看ip)
kubectl exec -it sharepid -c shell -- sh (--sh執行貝殼程式 interactive tty 互動虛擬終端機)
/* whoami
root
/# apk add curl (在alphine linux系統下安裝curl) 網路資料傳輸 curl
curl http://localhost:8888/hostname (8888是在寫image的時候就設定好的)
ps --help
ps aux 列出目前在跑的 process
ps -eaf
第一個 /pause 執行後會sleep infinity, 安全等級非常高, 網卡也放在這
第2,3個是 derby
第4個是 shell /bin/sh
sh (目前連進來的程式)

/bin/sh (這是shell)
sh (目前連進來的程式)
kubectl exec -it sharepid -c shell -- ls -alh /proc/1/root/
kubectl exec -it sharepid -c shell -- ls -al /proc/3/root/
containe可以透過process 去別人家串門子
kubectl delete pod sharepid (刪掉pod)
shareProcessNamespace: false 這行是內定的 其實不用特別打, 一開始打true是為了演示如果透過pid去操作別人的資料夾
restartPolicy: Never 如果container掛了 就不用在重啟
annotations:
kubectl.kubernetes.io/default-container: "shell" 設置default container為 shell
kd pod twoc (刪掉pod)
copy 投影片 19 20
cat yaml/cntorder.yaml
會先執行 20 的 initContainers 再接續 19 的
但是複製的過程出了問題, error: error parsing yaml/cntorder.yaml: error converting YAML to JSON: yaml: mapping values are not allowed in this context
助教先傳送指令過來, 我刪除了增加進去,
助教幫看 下了 for kube_node in $(kubectl get nodes | awk '{ print $1 }' | tail -n +2); do role=$(kubectl describe node $kube_node | grep 'Roles' | awk '{ print $2 }'); echo ${kube_node}: ${role}; echo " = " $(kubectl describe node ${kube_node} | grep Taint); done
並說明 是 taint 的問題
kubectl taint node m1 node-role.kubernetes.io/master:NoSchedule-這兩個是移除指令 目的在讓 m1 可以被指派 pod
kubectl taint node m1 node-role.kubernetes.io/master:NoSchedule-
node/m1 untainted
是 node m1 有 taint 所以 pod 無法被指派到 m1 但因為 yaml 有指定 node 為 m1 所以才會 pending
p.25
deployment object 用 template 做為結構
tty: true 是因為內定是使用 sh 程式, 所以需要準備虛擬終端機
kubectl get all
*當沒設定 tty: true
1.先做kubectl delete -f ~/wulin/yaml/depobj.yaml
2. nano /wulin/yaml/depobj.yaml 加入 tty: true 儲存後 apply (kubectl apply -f ~/wulin/yaml/depobj.yaml)
3.kg all (kubectl get all)
deployment 跟 replicaset 都有ready
kind: Deployment (企業啟用 HA: high availability 高可用度) 設計出來就是要跑 企業用的物件
kg all --selector app=deppod -o wide
p.27 如果delete 他自動重啟, ip會自動重配置, 之後無法找到原來建置物件
其解決方式: Kubernates Service
因為有多的冗餘的, 所以下 kd replicaset.apps/depobj-7cb97745c 去刪除
p.33 做進版動作 kubectl set image deployment.v1.apps/depng nginx=quay.io/cloudwalker/nginx:1.21 --record 但 --record 已經deprecated
rolled out 進板成功
透過 kubectl describe deployments depng 去看版本資訊
kubectl rollout undo deployment.v1.apps/depng --to-revision=1 回到前一版
kubectl apply -f yaml/depobj.yaml 再複製 p.41 echo的部分 kg all 看一下狀況
kubectl create -f yaml/mysrv.yaml
kg all -o wide
curl http://10.98.0.75:4000/hostname (不可有s)
kubectl scale deployment.apps/depobj --replicas=3
切換至w1 & w2 去看 ssh bigred@<alp.m1 IP> 有不同機器顯示
p.42 改成下列指令 kubectl run r1 --rm -it --image=quay.io/cloudwalker/alpine -- sh 否則會出錯
下完後 apk add curl
curl http://10.98.0.75:4000/hostname
kg all -o wide
p.45 $IP 是置換ip
因為先跑完p.46 指令 發現其實要新叫出cmd視窗 去call curl http://10.98.0.75:4000/hostname
後來又重新建置extip, 發現不成功 重新apply kubectl apply -f yaml/depobj.yaml 回去 就可以正常運行
最後結束流程: exit
k8s stop 按window鍵 中斷連線後 就ok了
留言
張貼留言