2020年12月cka17題

1.RBAC 4%

Task

創(chuàng)建一個名為deployment-clusterrole僅允許創(chuàng)建以下資源類型的新ClusterRole
Deployment
StatefulSet
DaemonSet
在現(xiàn)有的namespace app-team1中創(chuàng)建一個名為cicd-token的新ServiceAccount
限于namespace app-team1,將新的ClusterRole deployment-clusterrole綁定到新的ServiceAccount cicd-token

Answer

# 創(chuàng)建clusterrole
kubectl create clusterrole deployment-clusterrole --verb=create --resource=deployments,statefulsets,daemonsets

# 創(chuàng)建serviceaccount
kubectl create serviceaccount cicd-token -n app-team1

# 創(chuàng)建rolebinding
kubectl -n app-team1 create rolebinding cicd-token-binding --clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token

# 查看rolebinding
kubectl describe rolebinding  cicd-token-binding -n app-team1
image.png

知識點

1漫试、CluserRole庶诡、ServiceAccount舱权、RoleBinding
2.kubectl create clusterrole
3.kubectl create serviceaccount
4.kubectl create rolebinding

2.驅(qū)逐節(jié)點 4%

Task

將名為ek8s-node-1的節(jié)點設(shè)置為不可用祥诽,并重新調(diào)度在其上運行的所有pod

Answer

kubectl drain ek8s-node-1 -- ingore-daemonsets --force

知識點

1.kubectl cordon
2.kubectl drain
3.kubectl delete
4.kubectl uncordon

3. 集群升級 7%

Task

現(xiàn)有的Kubernetes集群正在運行版本1.18.8.僅將主節(jié)點上的所有Kubernetes控制平面和節(jié)點組件升級到版本1.19.0
另外锥余,在主節(jié)點上升級Kubelet和Kubectl
確定在升級之前drain主節(jié)點饼煞,便在升級后uncordon主節(jié)點源葫。請不要升級工作節(jié)點、etcd砖瞧、container管理器息堂、cni插件、dns服務(wù)或者任何其他插件块促。

Answer

注意:需要ssh到master節(jié)點上執(zhí)行荣堰,即在k8s集群內(nèi)操作

# ssh到master節(jié)點
ssh master-1

# 切換到root
sudo -i

# ubantu環(huán)境補充kubectl命令
source <(kubectl completion bash)

#
kubectl drain master-1 -- ingore-daemonsets

# 
apt-cache show kubeadm | grep 1.19.0

#
apt-get install kubeadm=1.19.0-00

#
kubeadm --version

#
kubeadm upgrade apply 1.19.0 --etcd-upgrade=false

#
apt-get install kubelet=1.19.0-00

#
kubelet --version

# 會看到兩個版本,客戶端版本和服務(wù)器版本都是1.19.0才是成功
kubectl --version

# 把master恢復(fù)調(diào)度竭翠,由“Ready振坚,SchedulingDisabled”變成“Ready”
kubectl uncordon master-1
# 回到student視圖下
exit
exit 
image.png

知識點

kubectl upgrade

4.ETCD備份恢復(fù) 7%

Task

首先,為運行在https://127.0.0.1:2379上的現(xiàn)有etcd實例創(chuàng)建快照并將快照保存到/var/lib/backup/etcd-snapshot.db
然后還原位于/var/lib/bakup/etcd-snapshot-previous.db
提供了以下TLS證書與密鑰斋扰,以通過etcdctl連接到服務(wù)器
CA證書:/opt/KUIN00601/ca.cert
客戶端證書:/opt/KUIN00601/etcd-client.crt
客戶端密鑰:/opt/KUIN00601/etcd-client.key

Answer

注意:需要ssh到master節(jié)點上執(zhí)行屡拨,即在k8s集群內(nèi)操作

# ssh到master節(jié)點
ssh master-1

# 必須指定etcdctl的版本是3
export ETCDCTL_API=3

# 創(chuàng)建etcd快照
ectdctl --endpoints=https://127.0.0.1:2379 --cacert="/opt/KUIN00601/ca.cert" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot save /var/lib/backup/etcd-snapshot.db
# 查看保存快照的狀態(tài)
ectdctl --endpoints=https://127.0.0.1:2379 --cacert="/opt/KUIN00601/ca.cert" --cert="/opt/KUIN00601/etcd-client.crt" --key="/opt/KUIN00601/etcd-client.key" snapshot status /var/lib/backup/etcd-snapshot.db -wtable


# 恢復(fù)etcd快照
etcdctl snapshot restore /var/lib/bakup/etcd-snapshot-previous.db
# 查看恢復(fù)快照的狀態(tài)
etcdctl snapshot status /var/lib/bakup/etcd-snapshot-previous.db -wtable
# 回到student視圖下
exit
exit 
image.png

知識點

1.必須指定etcdctl的版本是3
2.kubectl snapshot save
3.kubectl snapshotrestore
4.kubectl snapshotstatus

5.網(wǎng)絡(luò)策略 4%

Task

在已有的namespace foobar中創(chuàng)建一個名為allow-port-from-namespace的新NetworkPolicy,以允許namespace corp-bar訪問其Pods的端口9200

Answer

從官方文檔粘貼networkpolicy的樣例到本地yaml文件中褥实,再根據(jù)考試內(nèi)容修改呀狼。
粘貼時候注意格式,在vim編輯器中损离,先用:set paste哥艇,然后再粘貼。

vi nw.yaml

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: allow-port-from-namespace
  namespace: foobar
spec:
  podSelector:  {}
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          project: corp-bar
    ports:
    - protocol: TCP
      port: 9200
kubectl apply -f nw.yaml

kubectl get neworkpolicies -n foobar allow-port-from-namespace 

知識點

k8s的networkpolicy

6.SVC 4%

Task

重新配置現(xiàn)有的deployment front-end僻澎,并添加名為HTTP的端口規(guī)范貌踏,以暴露現(xiàn)有容器nginx的端口80/tcp。
創(chuàng)建一個名為front-end-svc的新服務(wù)窟勃,以暴露容器端口HTTP祖乳。
配置新服務(wù)以通過調(diào)度它們的節(jié)點上的NodePort暴露各個Pod。

Answer

# 修改deployment
kubectl edit deployments front-end

在template.spec.containers的name下面增加ports

name:  nginx
ports:
- containerPort:  80
  name: http
# 創(chuàng)建svc
kubectl create svc nodeport front-end-svc --tcp=80:80

# 測試(不通的話可能depoyment和svc標簽不一致)秉氧,建議在集群內(nèi)節(jié)點執(zhí)行
curl <CLUSTER_IP>

# 查看標簽
kubectl get svc front-end-svc --show-labels

或者最直接方式

 kubectl expose deployment front-end --port=80 --target-port=80 --protocol=TCP --type=NodePort --name=front-end-svc

知識點

1.kubectl create svc
2.kubectl expose

7.Ingress 7%

Task

創(chuàng)建一個名為nginx的Ingress并遵守以下規(guī)則
Name:pong
Namespace: ing-internal
Exposing service hello on path /hello 使用端口5678
驗證
curl -kL <INTERNAL_IP>/hello

Answer

從官網(wǎng)粘貼ingress的實例眷昆,并進行修改。

vi ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name:   pong
  namespace:  ing-internal
spec:
  rules:
  - http:
      paths:
      - path: /hello
        pathType: Prefix
        backend:
          service:
            name: hello
            port:
              number: 5678
kubectl apply -f ingress.yaml

kubectl get ingress pong -n ing-internal

知識點

ingress

8.擴容 4%

Task

將deployment web-service擴容到4個pods

Answer

kubectl scale deployment web-service --replicas=4

知識點

kubectl scale

9.通過node標簽調(diào)度pod 4%

Task

按以下規(guī)則調(diào)度pod:
name:nginx-kusc00401
image:nginx
Node selector:disk=ssd

Answer

kubectl run nginx-kusc00401 --image=nginx --dry-run=client -o yaml > 9.yaml
vi 9.yaml

增加NodeSelector

containers:
- image:  nginx
  name:
  resources:  {}
nodeSelector: 
  disk:  ssd
...

kubectl apply -f 9.yaml

知識點

1.kubectr run
2.標簽選擇器(節(jié)點標簽選擇器)

10.節(jié)點數(shù)量 4%

Task

檢查并查看有多少個節(jié)點準備就緒(不包括已獲得Noschedule的節(jié)點)并將其寫入 /opt/KUSC00402/kusc00402.txt

Answer

kubectl get node | grep Taint

echo 2 > /opt/KUSC00402/kusc00402.txt

知識點

11.創(chuàng)建多容器pod 4%

Task

創(chuàng)建一個名為kucc8的pod,并且使用以下鏡像(可能指定了1至4個鏡像)
nginx+redis+memcached+consul

Answer

kubectl run kucc8 --image=nginx --dry-run=client -o yaml > 11.yaml
vi 11.yaml

containers:
- name:  nginx
  image:  nginx
- name:  redis
  image:  redis
- name:  memcached
  image:  memcached
- name:  consul
  image:  consul


kubectl apply -f 11.yaml

kubectl get pod

知識點

1個pod啟多個不同鏡像容器

12.pv 4%

Task

創(chuàng)建一個名為app-config的pv亚斋,1Gi大小作媚,權(quán)限為ReadOnlyMany使用hostPath類型掛載到本地位置為/srv/app-config

Answer

從官網(wǎng)粘貼pv的yaml創(chuàng)建示例,并進行修改帅刊。

vi pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: app-config
  labels:
    type: local
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  hostPath:
    path: "/srv/app-config"


kubectl apply -f pv.yaml

kubectl get pv

知識點

PV

13.pvc 7%

Task

創(chuàng)建一個pvc滿足以下要求:
Name: pv-volume
Class: csi-hostpath-sc
Capcity: 10Mi
創(chuàng)建一個pod并掛載PVC:
name: test
image: nginx
Mount path: /usr/share/nginx/html
編輯pod vulume權(quán)限為ReadWriteOnce
最后纸泡,使用kubectl edit 或者kubectl patch講pvc大小改為70Mi

Answer

從官網(wǎng)粘貼pvc的yaml創(chuàng)建示例,并進行修改赖瞒。

vi pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-volume
spec:
  storageClassName: csi-hostpath-sc
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Mi

kubectl apply -f pvc.yaml

# 查看pvc狀態(tài)女揭,應(yīng)該是Bound?栏饮?田绑?
kubectl get pvc
vi pod-pvc.yaml

apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  volumes:
    - name: pv-volume
      persistentVolumeClaim:
        claimName: pv-volume
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: pv-volume

kubectl apply -f pod-pvc.yaml

kubectl get pod 

kubectl get pvc
# 英文要求注意加上--record,可以在history看到
kubectl edit pvc pv-volume  --record

知識點

PVC
Pod掛載PVC

14.輸出日志 5%

Task

監(jiān)控bar的日志
并將error字段內(nèi)容輸出到/opt/KUTR00101/bar

Answer

pod為bar的日志

kubectl logs bar | grep error >> /opt/KUTR00101/bar

知識點

kubectl logs

15.sidecar 13%

Task

在pod big-corp-app中增加一個busybox的sidecar抡爹,新的sidecar容器使用以下命令:
/bin/sh -c tail -n+1 -f /var/log/big-corp-app.log
掛載一個卷的名字叫做logs并確保/var/log/big-corp-app.log文件在sidecar中可達
不要修改已經(jīng)存在的容器
不要修改日志路徑與文件

Answer

kubectl get pod big-corp-app -o yaml > 15.yaml

vi 15.yaml 增加如下內(nèi)容(按照文件內(nèi)容分條增加文件中):

    volumeMounts:
    - name: logs
      mountPath: /var/log
  - name:  busybox
    image: busybox
    args: [/bin/sh, -c, 'tail -n+1 -f /var/log/big-corp-app.log']
    volumeMounts:
    - name: logs
      mountPath: /var/log
  volumes:
  - name: logs
    emptyDir: {}
# 不要修改已經(jīng)存在的容器
kubectl delete -f 15.yaml

kubectl apply -f 15.yaml

# 驗證新加的容器
kubectl logs big-corp-app busy-box 
kubectl exec big-corp-app -c busybox  -- tail -f /var/log/big-corp-app.log

# 驗證原來的容器(考試中的)
kubectl exec big-corp-app -c count -- tail -f /var/log/big-corp-app.log

知識點

使用 sidecar 容器運行日志代理

16.top 13%

Task

pod標簽name=cpu-loader中找到CPU負載最大pod名稱掩驱,并輸出到/opt/KUTR00401/KUTR00401.txt(該文件已經(jīng)存在)

此題中文翻譯有問題,文件名中文是3個連續(xù)0冬竟,英文是2個連續(xù)0

Answer

kubectl top pod -A -l name=cpu-loader --sort-by='cpu'

echo <pod名稱> >> /opt/KUTR00401/KUTR00401.txt

知識點

17.kubelet 13%

Task

名為wk8s-node-0的工作節(jié)點狀態(tài)為NotReady欧穴,找到并解決此問題

Answer

需要ssh到wk8s-node-0上執(zhí)行命令

# 查看kubelet狀態(tài)
systemctl  status kubelet

# 啟動kubelet
systemctl start kubelet

# 使kubelet服務(wù)開機開啟
systemctl  enable kubelet

# 查看kubelet狀態(tài)
system  status kubelet

# 驗證node節(jié)點狀態(tài)是Ready
kubectl get nodes

知識點

其它

1.考試環(huán)境ubantu,因此需要先進行命令補全

 source <(kubectl completion bash)

原視頻如下:
1.Certified Kubernetes Administrator CKA 2020年12月題庫講解(上)
2.Certified Kubernetes Administrator CKA 2020年12月題庫講解(下)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泵殴,一起剝皮案震驚了整個濱河市涮帘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笑诅,老刑警劉巖调缨,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吆你,居然都是意外死亡弦叶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進店門妇多,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伤哺,“玉大人,你說我怎么就攤上這事者祖×⒗颍” “怎么了?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵七问,是天一觀的道長蜓耻。 經(jīng)常有香客問我,道長械巡,這世上最難降的妖魔是什么刹淌? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任饶氏,我火速辦了婚禮,結(jié)果婚禮上芦鳍,老公的妹妹穿的比我還像新娘嚷往。我一直安慰自己葛账,他們只是感情好柠衅,可當我...
    茶點故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著籍琳,像睡著了一般菲宴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趋急,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天喝峦,我揣著相機與錄音,去河邊找鬼呜达。 笑死谣蠢,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的查近。 我是一名探鬼主播眉踱,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霜威!你這毒婦竟也來了谈喳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤戈泼,失蹤者是張志新(化名)和其女友劉穎婿禽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體大猛,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡亡脑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了炬称。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诱担。...
    茶點故事閱讀 39,745評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖琼牧,靈堂內(nèi)的尸體忽然破棺而出恢筝,到底是詐尸還是另有隱情,我是刑警寧澤巨坊,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布撬槽,位于F島的核電站,受9級特大地震影響趾撵,放射性物質(zhì)發(fā)生泄漏侄柔。R本人自食惡果不足惜共啃,卻給世界環(huán)境...
    茶點故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望暂题。 院中可真熱鬧移剪,春花似錦、人聲如沸薪者。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽言津。三九已至攻人,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間悬槽,已是汗流浹背怀吻。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留初婆,地道東北人蓬坡。 一個月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像磅叛,于是被迫代替她去往敵國和親屑咳。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,652評論 2 354

推薦閱讀更多精彩內(nèi)容