国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

K8s常見面試題20問

這篇具有很好參考價值的文章主要介紹了K8s常見面試題20問。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

K8s常見面試題19問

收集了一些K8s常見問題和同學(xué)們面試常被問到的問題.
如果有新的面試題私聊或者留言給我

1. Docker和虛擬機(jī)有那些不同

K8s常見面試題20問

虛擬化環(huán)境下每個 VM 是一臺完整的計算機(jī),在虛擬化硬件之上運(yùn)行所有組件,包括其自己的操作系統(tǒng)。
容器之間可以共享操作系統(tǒng),比起 VM 被認(rèn)為是更輕量級.且與 VM 類似,每個容器都具有自己的文件系統(tǒng)、CPU、內(nèi)存、進(jìn)程空間.

容器與虛擬化比有以下優(yōu)點(diǎn):

  • 敏捷應(yīng)用程序的創(chuàng)建和部署:與使用 VM 鏡像相比,提高了容器鏡像創(chuàng)建的簡便性和效率。
  • 持續(xù)開發(fā)、集成和部署:通過快速簡單的回滾(由于鏡像不可變性), 提供可靠且頻繁的容器鏡像構(gòu)建和部署。
  • 關(guān)注開發(fā)與運(yùn)維的分離:在構(gòu)建、發(fā)布時創(chuàng)建應(yīng)用程序容器鏡像,而不是在部署時, 從而將應(yīng)用程序與基礎(chǔ)架構(gòu)分離。
  • 可觀察性:不僅可以顯示 OS 級別的信息和指標(biāo),還可以顯示應(yīng)用程序的運(yùn)行狀況和其他指標(biāo)信號。
  • 跨開發(fā)、測試和生產(chǎn)的環(huán)境一致性:在筆記本計算機(jī)上也可以和在云中運(yùn)行一樣的應(yīng)用程序。
  • 跨云和操作系統(tǒng)發(fā)行版本的可移植性:可在 Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方運(yùn)行。
  • 以應(yīng)用程序?yàn)橹行牡墓芾恚禾岣叱橄蠹墑e,從在虛擬硬件上運(yùn)行 OS 到使用邏輯資源在 OS 上運(yùn)行應(yīng)用程序。
  • 松散耦合、分布式、彈性、解放的微服務(wù):應(yīng)用程序被分解成較小的獨(dú)立部分, 并且可以動態(tài)部署和管理 - 而不是在一臺大型單機(jī)上整體運(yùn)行。
  • 資源隔離:可預(yù)測的應(yīng)用程序性能。
  • 資源利用:高效率和高密度。

2. 簡述K8s和Docker關(guān)系

Docker是一個開源的應(yīng)用容器引擎.通過Dockerfile中的配置,將應(yīng)用,配置與依賴打包成一個鏡像,通過鏡像實(shí)現(xiàn)應(yīng)用的部署.
K8s是開源的容器集群管理系統(tǒng),可以實(shí)現(xiàn)容器集群的自動化部署,自動擴(kuò)縮容,維護(hù)等功能.
K8s是一個可移植、可擴(kuò)展的開源平臺,用于管理容器化的工作負(fù)載和服務(wù),可促進(jìn)聲明式配置和自動化。

K8s提供了以下容器不具備的功能:

  • 服務(wù)發(fā)現(xiàn)和負(fù)載均衡
  • 存儲編排
  • 自動部署和回滾
  • 自動完成裝箱計算
  • 自我修復(fù)
  • 密鑰與配置管理

3. 簡述Kube-proxy ipvs和iptables的異同

ipvs和iptables都是基于Netfilter實(shí)現(xiàn).
iptables是為防火墻設(shè)計的它采用規(guī)則表實(shí)現(xiàn),service數(shù)量越多iptables的規(guī)則條目越多,而iptables是從上到下逐一匹配,就會導(dǎo)致效率低下.
ipvs采用hash表實(shí)現(xiàn),當(dāng)service數(shù)量達(dá)到一定規(guī)模時,hash查表的速度優(yōu)勢會顯現(xiàn)出來,從而提高service的服務(wù)性能.

iptables的優(yōu)點(diǎn):

  1. 靈活
  2. 功能強(qiáng)大(根據(jù)tcp連接狀態(tài)對包進(jìn)行控制)
  3. 默認(rèn)安裝,老版本兼容

ipvs的優(yōu)點(diǎn):

  1. 支持hash轉(zhuǎn)發(fā)效率高
  2. 支持backend健康檢測
  3. 調(diào)度算法豐富(靜態(tài)算法:輪詢rr,加強(qiáng)輪詢wrr,目的地址dh,源地址sh,動態(tài)算法:最少連接lc,加權(quán)最少連接wlc,局部最少連接數(shù)LBLC,帶復(fù)制的局部最少連接數(shù)LBLCR,最短延遲NQ,加權(quán)最少連接增強(qiáng)版SED…)
  4. 可以動態(tài)設(shè)置ipset集合

4. 簡述kube-proxy切換ipvs負(fù)載的方法

步驟如下:

  1. 安裝ipvs
  2. 將kube-proxy模式改為ipvs
  3. 重啟kube-proxy
  4. 確認(rèn)切換完成

具體步驟如下:

  1. 查看是否使用了ipvs
[ $(ipvsadm -Ln|wc -l) -gt 1 ] && echo "有ipvs"||echo "沒ipvs"
  1. 載入ipvs模塊
# ubuntu
for i in `ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs/|sed -E 's/(.*)\.ko/\1/g'`;do /sbin/modprobe $i;done
# centos/redhat
for i in `ls /usr/lib/modules/$(uname -r)/kernel/net/netfilter/ipvs/|sed -E 's/(.*)\.ko\.xz/\1/g'`;do /sbin/modprobe $i;done

確認(rèn)加載完成

# lsmod |grep ip_vs
ip_vs_wlc              16384  0
ip_vs_sed              16384  0
ip_vs_pe_sip           16384  0
nf_conntrack_sip       36864  1 ip_vs_pe_sip
ip_vs_ovf              16384  0
ip_vs_nq               16384  0
ip_vs_mh               16384  0
ip_vs_lc               16384  0
ip_vs_lblcr            16384  0
ip_vs_lblc             16384  0
ip_vs_ftp              16384  0
ip_vs_fo               16384  0
ip_vs_dh               16384  0
ip_vs_sh               16384  0
ip_vs_wrr              16384  0
ip_vs_rr               16384  121
ip_vs                 155648  176 ip_vs_wlc,ip_vs_rr,ip_vs_dh,ip_vs_lblcr,ip_vs_sh,ip_vs_ovf,ip_vs_fo,ip_vs_nq,ip_vs_lblc,ip_vs_pe_sip,ip_vs_wrr,ip_vs_lc,ip_vs_mh,ip_vs_sed,ip_vs_ftp
nf_nat                 45056  4 ip6table_nat,iptable_nat,xt_MASQUERADE,ip_vs_ftp
nf_conntrack          139264  7 xt_conntrack,nf_nat,nf_conntrack_sip,nf_conntrack_netlink,xt_CT,xt_MASQUERADE,ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
libcrc32c              16384  6 nf_conntrack,nf_nat,btrfs,xfs,raid456,ip_vs
  1. 修改kube-proxy模式

執(zhí)行命令

kubectl edit cm kube-proxy -n kube-system

修改配置

# 將原來的mode: ""修改為下行
mode: ipvs
  1. 重啟kube-proxy容器
kubectl rollout -n kube-system restart daemonset kube-proxy
  1. 確認(rèn)是否切換完成
kubectl logs -n kube-system $(kubectl get pods -n kube-system |grep kube-proxy |tail -1 |awk '{print $1}')|grep ipvs

5. 簡述微服務(wù)部署中的藍(lán)綠發(fā)布

常見發(fā)布有:藍(lán)綠發(fā)布,金絲雀發(fā)布,滾動發(fā)布
藍(lán)綠發(fā)布主要用作測試環(huán)境,正式環(huán)境多使用金絲雀或滾動發(fā)布

藍(lán)綠部署(Blue/Green Deployment)一共有2套系統(tǒng).一套是正在提供服務(wù)的系統(tǒng),標(biāo)記為"綠色";另一套是準(zhǔn)備發(fā)布的系統(tǒng),標(biāo)記為"藍(lán)色".兩套系統(tǒng)都是功能完善的,正在運(yùn)行的系統(tǒng),只是系統(tǒng)版本和對外提供服務(wù)的情況不同.

藍(lán)色系統(tǒng)用來做發(fā)布前測試,測試發(fā)現(xiàn)問題直接在藍(lán)色系統(tǒng)上進(jìn)行修改,不干擾用戶正在使用的綠色系統(tǒng).

藍(lán)色系統(tǒng)經(jīng)過反復(fù)的測試,修改,驗(yàn)證,確定達(dá)到上線標(biāo)準(zhǔn)后,直接將用戶切換到藍(lán)色系統(tǒng).

優(yōu)點(diǎn):

  1. 升級切換與回退速度快
  2. 版本切換時無需停機(jī),風(fēng)險最小

不足之處:

  1. 它是一個全量切換.無法切分流量
  2. 需要2倍的資源
  3. 如果藍(lán)色版本有問題,對用戶體驗(yàn)有影響

6. 什么是灰度發(fā)布

灰度發(fā)布:也被叫作金絲雀發(fā)布。灰度發(fā)布屬于增量發(fā)布方法。也就是說,服務(wù)升級的過程中,新舊版本會同時為用戶提供服務(wù)。

先將一小部分用戶流量切換到新版本上,測試版本性能與功能.確認(rèn)沒有問題后在對整個集群進(jìn)行升級.灰度發(fā)布就是把部署好的服務(wù)分批次,逐步暴露給越來越多的用戶,最終完成版本切替上線.

優(yōu)點(diǎn)

  1. 靈活,粒度細(xì)
  2. 無需(少量)侵入代碼
  3. 用戶無感知,平滑過渡

不足:

  1. 對自動化要求較高

部署過程:

  1. 從LB拆除灰度服務(wù)器,升級后再加入
  2. 少量用戶切換到新版本進(jìn)行測試
  3. 如果沒問題,調(diào)整灰度服務(wù)器數(shù)量,重復(fù)步驟2將更多的用戶流量切換到新版本.直至所有用戶流量完成切換.

K8s常見面試題20問

7. 什么是滾動發(fā)布

k8sdeployment是滾動發(fā)布.按批次依次替換老版本(maxSurge默認(rèn)25%),逐步升級到新版本.發(fā)布過程中應(yīng)用不中斷,用戶體驗(yàn)平滑.

K8s常見面試題20問

8. 簡述Kubernetes靜態(tài)Pod

靜態(tài)Pod由kubelet創(chuàng)建并且總是在kubelet所在節(jié)點(diǎn)上運(yùn)行.

它們不能通過API Server進(jìn)行管理,無法與==ReplicationController,Deployment,Daemonset==進(jìn)行關(guān)聯(lián),它就是一個Pod,并且kubelet也無法對其健康檢查

創(chuàng)建靜態(tài)Pod有兩種方式:配置文件方式HTTP方式

配置文件方式: 通過在manifests目錄下創(chuàng)建yaml,由kubelet定期掃描自動創(chuàng)建Pod資源

HTTP方式:kubelet啟動參數(shù)–manifest-url,kubelet定期訪問此url,下載Pod定義文件,以yaml或json格式進(jìn)行解析,并創(chuàng)建Pod.

kubeadm安裝集群配置文件路徑:/var/lib/kubelet/config.yaml中staticPodPath: /etc/kubernetes/manifests

二進(jìn)制安裝配置文件路徑:由/usr/lib/systemd/system/kubelet.service的–pod-manifest-path=值定義

etcd,kube-apiserver,kube-controller-manager,kube-scheduler都是靜態(tài)Pod

如果需要創(chuàng)建自己的靜態(tài)pod,直接將yaml放置在 /etc/kubernetes/manifests 目錄下即可

配置文件方式創(chuàng)建:

/etc/kubernetes/manifests/static-web.yaml

文件內(nèi)容如下

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP

當(dāng)文件被創(chuàng)建后該pod就會被kubelet自動創(chuàng)建,且當(dāng)停止該容器后馬上會被自動再次創(chuàng)建.

root@ks-master:~# kubectl get pods
NAME                                     READY   STATUS    RESTARTS   AGE
busybox                                  1/1     Running   58         22d
nfs-client-provisioner-68c8fcd77-hg8hl   1/1     Running   15         23d
static-web-ks-master                     1/1     Running   0          7m54s
root@ks-master:~# docker ps|head -2
CONTAINER ID   IMAGE                                                               COMMAND                  CREATED          STATUS          PORTS     NAMES
fe2aab2799e1   nginx                                                               "/docker-entrypoint.…"   7 minutes ago    Up 7 minutes              k8s_web_static-web-ks-master_default_b2f5f5f4465db575a93c8173ea740eed_0
root@ks-master:~# docker stop fe2aab2799e1
fe2aab2799e1
root@ks-master:~# docker ps|head -2
CONTAINER ID   IMAGE                                                               COMMAND                  CREATED          STATUS                  PORTS     NAMES
d514ae256d77   nginx                                                               "/docker-entrypoint.…"   1 second ago     Up Less than a second             k8s_web_static-web-ks-master_default_b2f5f5f4465db575a93c8173ea740eed_1

想要刪除把配置文件刪除即可

9. 簡述K8s存儲卷有哪些,說明它們的特征和用途

  1. emptyDir: Pod調(diào)度到節(jié)點(diǎn)創(chuàng)建的臨時空目錄,Pod刪除隨之刪除,用于容器存放臨時文件
  2. hostPath: 節(jié)點(diǎn)存儲卷,將宿主機(jī)的文件或目錄掛載到Pod
  3. Pv/Pvc: 外部存儲掛載到Pod,生命周期獨(dú)立于Pod,具有持久性
  4. StorageClass: 充當(dāng)PV模板,從而可以動態(tài)創(chuàng)建PV,自動構(gòu)建相應(yīng)的持久化數(shù)據(jù)存儲
  5. configmap: 明文,熱更新,支持多個pod共享,避免重復(fù)修改.
  6. secret: 密文

10. 簡述Dockerfile中copy和add的異同

Copy: 將宿主機(jī)的文件復(fù)制到容器內(nèi)

Add: 除了復(fù)制功能以外,還帶有解壓縮功能.支持url

copy后解壓,需要先確認(rèn)容器內(nèi)有解壓所需的命令.當(dāng)對容器鏡像大小要求比較苛刻時add顯然更好.使用空鏡像scratch時特別明顯

常見較小的鏡像有:

鏡像版本 大小
Alpine 7.05 MB
Busybox 4.86MB
Debian:stable 124 MB
Ubuntu:18.04 63.1 MB
CentOS:7.9.2009 204 MB

11. 簡述Dockerfile中CMD 和ENDPOINTS區(qū)別

CMD: 指定啟動容器時執(zhí)行的命令,每個 Dockerfile只能有一條 CMD 命令。如果指定了多條命令,只有最后一條會被執(zhí)行。如果用戶啟動容器時候指定了運(yùn)行的命令,則會覆蓋掉 CMD 指定的命令。

Endpoint:配置容器啟動后執(zhí)行的命令,并且不可被 docker run 提供的參數(shù)覆蓋。每個 Dockerfile 中只能有一個 ENTRYPOINT,當(dāng)指定多個時,只有最后一個起效。

兩者區(qū)別:
1、CMD指令指定的容器啟動時命令可以被docker run指定的命令覆蓋ENTRYPOINT指令指定的命令不能被覆蓋,而是將docker run指定的參數(shù)當(dāng)做ENTRYPOINT指定命令的參數(shù)。
2、CMD與ENTRYPOINT同時存在時,CMD指令可以為ENTRYPOINT指令設(shè)置默認(rèn)參數(shù),而且CMD可以被docker run指定的參數(shù)覆蓋;

12. K8s如何添加和移除節(jié)點(diǎn)

12.1 移除節(jié)點(diǎn)

12.1.1 設(shè)置節(jié)點(diǎn)為不可調(diào)度

kubectl cordon k8s-node2

12.1.2 驅(qū)逐節(jié)點(diǎn)上的Pod

kubectl drain ks-node2 --ignore-daemonsets --delete-local-data --force

12.1.3 刪除節(jié)點(diǎn)

kubectl delete node k8s-node2

12.1.4 清空節(jié)點(diǎn)上數(shù)據(jù)

kubeadm reset -f
systemctl disable --now kubelet
systemctl disable --now docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X
ipvsadm -C

12.2 添加節(jié)點(diǎn)

12.2.1 kubesphere

./kk add nodes -f sample.yaml

12.2.2 kubeadmin

先檢查是否有token

kubeadm token list

如果沒有,創(chuàng)建token

## 默認(rèn)24小時token
kubeadm token create --print-join-command
## 永久
kubeadm token create --print-join-command --ttl 0

在新節(jié)點(diǎn)上執(zhí)行,添加節(jié)點(diǎn)

kubeadm join 192.168.31.131:6443 --token 9q1zfx.r2wrn6kzu03qr9df --discovery-token-ca-cert-hash sha256:94ab137b5f15edd2b7f09b570372dcf6545129a362dfc332250c5e1c68df5a06

12.2.3 二進(jìn)制安裝的k8s

  1. 復(fù)制配置文件
scp kubelet kube-proxy bootstrap.kubeconfig  kube-proxy.kubeconfig root@192.168.31.151:/data/kubernetes/cfg/
scp kubelet.service  kube-proxy.service  flanneld.service  root@192.168.31.151:/usr/lib/systemd/system
  1. 復(fù)制證書
scp ca-key.pem ca.pem  server-key.pem  server.pem  root@192.168.31.151:/data/etcd/ssl/
scp ca.pem  ca-key.pem  server.pem  server-key.pem  kube-proxy.pem kube-proxy-key.pem  root@192.168.31.151:/data/kubernetes/ssl/
  1. 修改kubelet和kube-proxy,將地址改為本地
## kubelet
--address=192.168.31.151 \
--hostname-override=192.168.31.151 \
## kube-proxy
--hostname-override=192.168.31.151 \
  1. 啟動服務(wù)
systemctl start docker;systemctl enable docker
systemctl start flanneld;systemctl enable flanneld
systemctl start kubelet;systemctl enable kubelet
systemctl start kube-proxy;systemctl enable kube-proxy
  1. master節(jié)點(diǎn)允許加入
kubectl get csr
kubectl certificate approve node-csr-TLFAeDwUhcScypkpi-wokn7Hv5JFr34D17IJSFFClik

13. 如何將SVC的NodePort設(shè)置成40000端口

  1. 默認(rèn)svc NodePort范圍是30000-32767
  2. 修改kube-apiserver.yaml添加–service-node-port-range=30000-45000
/etc/kubernetes/manifests/kube-apiserver.yaml
## 略
- --service-node-port-range=30000-45000

修改后執(zhí)行kubectl時會有報錯

The connection to the server lb.kubesphere.local:6443 was refused - did you specify the right host or port?

刪除apiserver靜態(tài)pod(或在master節(jié)點(diǎn)刪除apiserver的容器),后恢復(fù)

kubectl delete pod -n kube-system `kubectl get pods -n kube-system --selector=component=kube-apiserver --output=jsonpath={.items..metadata.name}`

此時再創(chuàng)建40000的nodeport就不會報錯了

14. 簡述K8s常用控制器及特點(diǎn)

  1. Deployment 無狀態(tài)控制器,啟動順序是無序的,Pod名字和ip是隨機(jī)的,后臺存儲往往是共享的.(web網(wǎng)站)
  2. StatefulSet 有狀態(tài)控制器,有序啟動,Pod名字固定,后臺存儲是獨(dú)占的.(主從數(shù)據(jù)庫)
  3. Daemonset 每個節(jié)點(diǎn)都部署.(日志采集和監(jiān)控)
  4. CronJob 定時運(yùn)行Pod
  5. Job 一次性運(yùn)行Pod

15. K8s無法拉伸和收縮副本可能的原因

手動拉伸或者收縮

kubectl scale deployment nginx --replicas=2

生產(chǎn)中常用HPA實(shí)現(xiàn)Deployment的自動伸縮

  1. 命令行
## 設(shè)置deployment中容器的cpu和內(nèi)存
kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi
## 設(shè)置autoscal
kubectl autoscale deployment nginx --min=4 --max=8 --cpu-percent=80
## 查看autoscal
kubectl get hpa
  1. yaml方式
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-nginx
spec:
  maxReplicas: 8
  minReplicas: 4
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  targetCPUUtilizationPercentage: 80
  1. 當(dāng)手動伸縮值與HPA的最小值沖突時,收縮不生效
  2. 當(dāng)手動伸縮值與HPA的最大值沖突時,擴(kuò)展不生效
  3. 當(dāng)對deployment有requests參數(shù)時,當(dāng)(namespace或節(jié)點(diǎn))可用資源不滿足時,擴(kuò)展失效.

16. Node容忍節(jié)點(diǎn)異常事件如何設(shè)置

node節(jié)點(diǎn)異常故障觸發(fā)遷移默認(rèn)時間是300秒.

tolerationSeconds: 300

也就是node節(jié)點(diǎn)故障了,但Pod任然為健康狀態(tài),此時用戶訪問就會造成異常

因此服務(wù)中斷時間=停機(jī)等待時間300秒+Pod重建時間+服務(wù)啟動時間+readiness探針檢測正常時間.

K8s常見面試題20問

可以使用以下方法縮短收斂時間

  1. 將容忍時間從300秒改為100秒,但不能過短,一旦網(wǎng)絡(luò)延遲或抖動造成頻繁切換

編寫yaml nginx-patch.yaml

spec:
  template:
    spec:
      tolerations:
      - effect: NoExecute
        key: node.kubernetes.io/not-ready
        operator: Exists
        tolerationSeconds: 100
      - effect: NoExecute
        key: node.kubernetes.io/unreachable
        operator: Exists
        tolerationSeconds: 100

以補(bǔ)丁的方式打入deployment中

kubectl patch deployment nginx-deployment --patch "$(cat nginx-patch.yaml)"

此時所有pod會被重建

root@ks-master:~# kubectl patch deployment nginx-deployment --patch "$(cat nginx-patch.yaml)"
deployment.apps/nginx-deployment patched
root@ks-master:~# kubectl get pods
NAME                                     READY   STATUS        RESTARTS   AGE
busybox                                  1/1     Running       63         22d
nfs-client-provisioner-68c8fcd77-hg8hl   1/1     Running       19         23d
nginx-deployment-78cd64ff75-f6d87        1/1     Terminating   1          110m
nginx-deployment-78cd64ff75-g8nv4        1/1     Terminating   1          68m
nginx-deployment-78cd64ff75-h7swc        1/1     Terminating   1          68m
nginx-deployment-78cd64ff75-lx4ps        1/1     Terminating   1          110m
nginx-deployment-78cd64ff75-md2rv        1/1     Terminating   1          68m
nginx-deployment-78cd64ff75-n2z4t        1/1     Terminating   1          68m
nginx-deployment-78cd64ff75-rzs9h        1/1     Terminating   1          68m
nginx-deployment-78cd64ff75-w9rs9        1/1     Terminating   1          68m
nginx-deployment-7957b6f749-2n8jf        1/1     Running       0          18s
nginx-deployment-7957b6f749-2vcct        1/1     Running       0          19s
nginx-deployment-7957b6f749-42px5        1/1     Running       0          16s
nginx-deployment-7957b6f749-cqfsk        1/1     Running       0          16s
nginx-deployment-7957b6f749-dsqpl        1/1     Running       0          18s
nginx-deployment-7957b6f749-hmfbd        1/1     Running       0          16s
nginx-deployment-7957b6f749-nv28k        1/1     Running       0          15s
nginx-deployment-7957b6f749-wzwvg        1/1     Running       0          18s
static-web-ks-master                     1/1     Running       1          5h45m

此時not-ready和unreachable的時間都變成了100秒

root@ks-master:~# kubectl describe pod nginx-deployment-7957b6f749-2n8jf |grep 100
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 100s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 100s
  1. kube-proxy負(fù)載方式由iptables改為ipvs

詳見4

17. 簡述Deployment控制器的升級和回滾

nginx-blue.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  revisionHistoryLimit: 5  # 記錄多少個版本用來回滾
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: harbor.intra.com/nginx/nginx-blue:v1
        ports:
        - containerPort: 80

部署生效

kubectl apply -f nginx-blue.yaml --record

訪問測試

# curl 12.233.106.215
web-app1-blue  version 2.0.0

部署green版本

cp nginx-blue.yaml nginx-green.yaml
sed -i 's/blue/green/g' nginx-green.yaml
kubectl apply -f nginx-green.yaml --record
# curl 12.233.106.223
web-app1-green  version 1.0.0

查看版本

# kubectl rollout history deployment nginx-deployment
1         kubectl apply --filename=nginx-blue.yaml --record=true
2         kubectl apply --filename=nginx-green.yaml --record=true

回滾到blue版本

kubectl rollout undo deployment nginx-deployment --to-revision=1
# curl 12.233.106.224
web-app1-blue  version 2.0.0

查看版本

# kubectl rollout history deployment nginx-deployment
2         kubectl apply --filename=nginx-green.yaml --record=true
3         kubectl apply --filename=nginx-blue.yaml --record=true

18. kubectl自動補(bǔ)全

  1. 安裝依賴包
# Centos
yum install bash-completion
# ubuntu
apt install bash-completion
  1. 修改~/.bashrc
echo "source <(kubectl completion bash)" >> ~/.bashrc
source ~/.bashrc

19. 生產(chǎn)環(huán)境中如何阻止內(nèi)核及其他軟件更新版本

19.1 Ubuntu環(huán)境

  1. 查看當(dāng)前內(nèi)核
root@ks-master:~# uname -r
5.4.0-148-generic
root@ks-master:~# dpkg --get-selections|grep -E 'linux-image-5.4.0-148-generic|linux-headers-5.4.0-148-generic'
linux-headers-5.4.0-148-generic                 install
linux-image-5.4.0-148-generic                   install
  1. 禁止這2個軟件包更新
root@ks-master:~# apt-mark hold linux-headers-5.4.0-148-generic linux-image-5.4.0-148-generic
linux-headers-5.4.0-148-generic set on hold.
linux-image-5.4.0-148-generic set on hold.

再次查看可以看到這2個都已經(jīng)被鎖定了

root@ks-master:~# dpkg --get-selections|grep -E 'linux-image-5.4.0-148-generic|linux-headers-5.4.0-148-generic'
linux-headers-5.4.0-148-generic                 hold
linux-image-5.4.0-148-generic                   hold
root@ks-master:~# apt-mark showhold
linux-headers-5.4.0-148-generic
linux-image-5.4.0-148-generic
  1. 使用unhold恢復(fù)更新
root@ks-master:~# apt-mark unhold linux-headers-5.4.0-148-generic linux-image-5.4.0-148-generic
Canceled hold on linux-headers-5.4.0-148-generic.
Canceled hold on linux-image-5.4.0-148-generic.
root@ks-master:~# dpkg --get-selections|grep -E 'linux-image-5.4.0-148-generic|linux-headers-5.4.0-148-generic'
linux-headers-5.4.0-148-generic                 install
linux-image-5.4.0-148-generic                   install
root@ks-master:~# apt-mark showhold

19.2 Redhat系列

臨時生效:在執(zhí)行yum update的時候加上參數(shù)

yum update --exclude=kernel*

永久生效:在/etc/yum.conf的[main]下面追加exclude=kernel*

echo "exclude=kernel*" >> /etc/yum.conf

20. 簡述Dockerfile中ENV和ARG的區(qū)別

相同:

? 兩個都是Dockerfile中的變量
? 兩者都不能被CMD和ENTRYPOINT

不同:

  1. 變量的生命周期

? ARG的生命周期僅是docker構(gòu)建中有效,一旦構(gòu)建完ARG的值失效.
? ENV的不僅構(gòu)建時有效,當(dāng)使用此鏡像再次構(gòu)建或者使用此鏡像生成容器,ENV的值任有效.

  1. 變量值的傳遞參數(shù)

? ARG構(gòu)建時通過–build-arg參數(shù)將變量傳給Dockerfile
? ENV在docker run 命令中通過 -e標(biāo)記來傳遞環(huán)境變量文章來源地址http://www.zghlxwxcb.cn/news/detail-505750.html

到了這里,關(guān)于K8s常見面試題20問的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 指令收集:DOCKER+K8S

    指令收集:DOCKER+K8S

    1.鏡像指令: docker images 2.容器指令: docker ps 3.啟動類指令 systemctl start docker 1.node節(jié)點(diǎn)相關(guān): kubectl get node? 獲取節(jié)點(diǎn)信息 2.pod 相關(guān): kubectl run ng-test --image=nginx:1.14.2 運(yùn)行一個節(jié)點(diǎn) 3.namespace 相關(guān): kubectl logs -f POD-NAME -n namespace? ?查看節(jié)點(diǎn)控制臺的日志 4.service 相關(guān): kubectl get

    2024年02月04日
    瀏覽(27)
  • k8s報錯收集匯總

    k8s報錯收集匯總

    name: Invalid value: “openstack_controller”: a DNS-1123 subdomain must consist of lower case alphanumeric characters, ‘-’ or ‘.’, and must start and end with an alphanumeric character (e.g. ‘example.com’, regex used for validation is ‘a(chǎn)-z0-9?(.a-z0-9?)*’) 執(zhí)行的命令為: kubeadm init --apiserver-advertise-address=192.168.2.111 –im

    2023年04月09日
    瀏覽(13)
  • k8s容器日志收集方案

    k8s容器日志收集方案

    ? ? log-pilot安裝 ? ? ? ? ? ?

    2024年02月16日
    瀏覽(27)
  • k8s日志收集方案及實(shí)戰(zhàn)

    k8s日志收集方案及實(shí)戰(zhàn)

    k8s 日志收集方案 三種收集方案的優(yōu)缺點(diǎn): 日志收集環(huán)境: k8s日志收集架構(gòu) k8s日志收集所用到的安裝包及軟件: 1、elasticsearch安裝配置 1.1 es安裝 1.2 es配置 1.3 啟動es 2、kibana安裝配置 2.1 kibana安裝 2.2 kibana配置 2.3 啟動kibana 3、zookeeper安裝配置 3.1 zookeeper安裝 下載安裝包,下載

    2024年02月04日
    瀏覽(19)
  • K8s 日志收集-Day 07

    K8s 日志收集-Day 07

    官方文檔:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/ (1)node節(jié)點(diǎn)收集 基于daemonset部署日志收集進(jìn)程,實(shí)現(xiàn)json-file類型(標(biāo)準(zhǔn)輸出/dev/stdout、錯誤輸出/dev/stderr)日志收集; 該方式的優(yōu)點(diǎn):日志收集架構(gòu)簡單,易部署、易維護(hù)。 該方式的缺點(diǎn):node節(jié)點(diǎn)產(chǎn)生的日志、

    2024年03月26日
    瀏覽(25)
  • K8S:容器日志收集與管理

    K8S:容器日志收集與管理

    Kubernetes 里面對容器日志的處理方式,都叫作 cluster-level-logging,即:這個日志處理系統(tǒng),與容器、Pod 以及 Node 的生命周期都是完全無關(guān)的。這種設(shè)計當(dāng)然是為了保證,無論是容器掛了、Pod 被刪除,甚至節(jié)點(diǎn)宕機(jī)的時候,應(yīng)用的日志依然可以被正常獲取到。 而對于一個容器來

    2024年02月15日
    瀏覽(25)
  • EFK簡單部署收集K8S日志

    EFK簡單部署收集K8S日志

    安裝ES kibana K8S部署

    2024年04月27日
    瀏覽(26)
  • K8S部署EFK(fluentd)收集日志

    首先部署es和kinban es部署 創(chuàng)建es-svc es-statefulset.yaml 開啟es跨域訪問 部署kinban 創(chuàng)建kibana的configmap kinban開啟中文 創(chuàng)建kibana 部署fluentd 創(chuàng)建fluentd-configmap 只收集pod label 標(biāo)記為 logging=true 的日志 注意掛載的日志目錄出現(xiàn)unreadable 說明日志軟連接有問題,無法讀取日志 部署fluentd-dae

    2024年02月16日
    瀏覽(27)
  • ELK 日志系統(tǒng)收集K8s中日志

    ELK 日志系統(tǒng)收集K8s中日志

    ? K8s彈性伸縮性:導(dǎo)致不能預(yù)先確定采集的目標(biāo) ? 容器隔離性:容器的文件系統(tǒng)與宿主機(jī)是隔離,導(dǎo)致日志采集器讀取日志文件受阻。 應(yīng)用程序日志記錄體現(xiàn)方式分為兩類: ? 標(biāo)準(zhǔn)輸出:輸出到控制臺,使用kubectl logs可以看到。 例如 nginx日志是將訪問日志輸出到標(biāo)準(zhǔn)輸出

    2024年02月09日
    瀏覽(26)
  • 收集K8S容器的標(biāo)準(zhǔn)輸出日志實(shí)踐

    參考文章 k8s日志文件說明 一般情況下,容器中的日志在輸出到標(biāo)準(zhǔn)輸出 (stdout) 時,會以? *-json.log ? 的命名方式保存在 /var/lib/docker/containers 目錄中。 這里能看到,有這么個文件:? /data/docker/containers/container id/*-json.log ,然后k8s默認(rèn)會在? /var/log/containers ? 和? /var/log/pods 目

    2024年02月11日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包