kubernetes & docker 問題整理

1. 宿主機(jī)如何與容器通信

  • Bridge模式次企,即使用docker0網(wǎng)橋默認(rèn)
    1. 創(chuàng)建獨(dú)立的Network Namespace
    2. 創(chuàng)建容器時會虛擬出網(wǎng)卡創(chuàng)建一對虛擬網(wǎng)卡veth pair設(shè)備剃法,一端連在容器里(eth0網(wǎng)卡),另一端接在docker0網(wǎng)橋
    3. docker run 通過參數(shù)-p 宿主機(jī)端口:容器端口進(jìn)行端口映射。本質(zhì)上是對iptables做了DNAT規(guī)則兑凿,實(shí)現(xiàn)端口轉(zhuǎn)發(fā)功能剩蟀,可通過iptables -t nat -vnL查看
    4. 同個網(wǎng)橋上的可以直接訪問
    5. 不同網(wǎng)橋上,容器A的流量先通過網(wǎng)橋A到宿主機(jī)荔仁,再通過網(wǎng)橋B到要訪問的容器B
    • 優(yōu)點(diǎn):隔離性好
    • 缺點(diǎn):相比較Host模式,網(wǎng)絡(luò)性能略低(多了層路由轉(zhuǎn)發(fā))
  • Host模式芽死,即使用宿主機(jī)網(wǎng)絡(luò)-net=host
    與宿主機(jī)共用一個Network Namespace
    • 優(yōu)點(diǎn):網(wǎng)絡(luò)性能好
    • 缺點(diǎn):會引入共享網(wǎng)絡(luò)資源問題乏梁,比如端口沖突
  • Container模式
    新創(chuàng)建的容器和已有的容器共享一個Network Namespace,而不是和宿主機(jī)共享
  • None模式
    會創(chuàng)建Network Namespace关贵,但是不會進(jìn)行任何網(wǎng)絡(luò)配置(即沒有網(wǎng)卡遇骑、路由、ip等信息)揖曾,需要手動添加

2. pod創(chuàng)建流程

  1. 客戶端提交創(chuàng)建請求落萎,API ServerRESTful APIkubectl
  2. API Server處理用戶請求,存儲pod數(shù)據(jù)到etcd
  3. kube-scheduler通過API Server watch API一直監(jiān)聽未綁定的pod炭剪,嘗試為pod分配主機(jī)
  • 過濾節(jié)點(diǎn)(調(diào)度預(yù)選):kube-scheduler用一組郭澤過濾掉不符合要求的主機(jī)练链。比如說pod制定了所需要的資源量,那可用資源不夠的會被過濾掉
  • 節(jié)點(diǎn)打分(調(diào)度優(yōu)選):對預(yù)選的節(jié)點(diǎn)進(jìn)行打分奴拦,(考慮一些整體優(yōu)化策略:pod分散媒鼓,使用最低負(fù)載的節(jié)點(diǎn)等)
  • 選擇節(jié)點(diǎn):選擇打分最高的節(jié)點(diǎn),進(jìn)行binding操作错妖,結(jié)果存儲到etcd中(調(diào)用API Server創(chuàng)建一個boundpod對象绿鸣,描述在一個工作節(jié)點(diǎn)上綁定運(yùn)行的所有pod信息)
  1. 目標(biāo)節(jié)點(diǎn)上的kubelet通過API Server watch API定期獲取boundpod對象,發(fā)現(xiàn)需要創(chuàng)建pod了暂氯,則調(diào)用Docker API創(chuàng)建并啟動pod
  2. kubelet通過CRI(Container Runtime Interface)獲取pod狀態(tài)潮模,傳給API Server,數(shù)據(jù)被更新到etcd中

3. etcd存儲的是什么數(shù)據(jù)

etcd是一個高可用的分布式鍵值(key-value)數(shù)據(jù)庫
etcd內(nèi)部采用raft協(xié)議作為一致性算法
etcd至于go實(shí)現(xiàn)
服務(wù)注冊和服務(wù)發(fā)現(xiàn)

保存了集群所有的網(wǎng)絡(luò)配置和API Server對象的狀態(tài)信息

4. 怎么查看etcd數(shù)據(jù)

exec進(jìn)到pod株旷,使用etcdctl命令

$ ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt \
--key=/etc/kubernetes/pki/etcd/healthcheck-client.key \
get / --prefix --keys-only

5. etcd怎么做數(shù)據(jù)備份和數(shù)據(jù)恢復(fù)

  • 直接備份數(shù)據(jù)目錄(用于單節(jié)點(diǎn))
    etcd組件的數(shù)據(jù)目錄默認(rèn)位于/var/lib/etcd

  • 使用快照命令備份(可用于集群)

// 備份
$ etcdctl --endpoints=127.0.0.1:2380,ip:port snapshot save backupName.db
// 恢復(fù)
$ etcdctl snapshot restore backupName.db --data-dir=/var/lib/etcd

6. pod的狀態(tài)是怎么監(jiān)控的再登,怎么做到改變pod狀態(tài)的

可能是CRI(Container Runtime Interface)

7.怎么修改docker容器資源?修改后容器重啟嗎晾剖?那修改pod呢锉矢?

// 修改容器不重啟
$ docker update -c xxx -m xxx [container_id]

修改pod重啟,因?yàn)閗ubelet會去同步etcd的數(shù)據(jù)syncPod

8. 資源隔離的具體實(shí)現(xiàn)

使用Linux的namespace實(shí)現(xiàn)齿尽,提供六種隔離機(jī)制:

  • UTS : 主機(jī)名與域名
  • IPC : 信號量沽损、消息隊(duì)列、共享內(nèi)存
  • PID : 進(jìn)程編號
  • Network : 網(wǎng)絡(luò)設(shè)備循头、網(wǎng)絡(luò)棧绵估、端口等
  • Mount : 掛載點(diǎn)
  • User : 用戶和用戶組

與namespace相關(guān)的三個系統(tǒng)調(diào)用:

  • clone
    創(chuàng)建全新的namespace炎疆,由clone創(chuàng)建的新進(jìn)程就位于這個新的namespace里
    創(chuàng)建時傳入flags參數(shù),可選值有CLONE_NEWIPC国裳、CLONE_NEWNET形入、CLONE_NEWNSCLONE_NEWPID缝左、CLONE_NEWUTS亿遂、CLONE_NEWUSER,分別對應(yīng)上面六種namespace
  • unshare
    為已有進(jìn)程創(chuàng)建新的namespace
  • setns
    把某個進(jìn)程放在已有的某個namespace里

9. 資源限制的具體實(shí)現(xiàn)

使用Linux的Cgroup實(shí)現(xiàn)渺杉,簡單說是把進(jìn)程放到一個組里面統(tǒng)一加以控制蛇数。
作用:可以限制、記錄是越、隔離進(jìn)程組所使用的物理資源(包括:CPU耳舅、Memory、IO 等)倚评,為容器實(shí)現(xiàn)虛擬化提供了基本保證浦徊。
原理:將一組進(jìn)程放在放在一個控制組里,通過給這個控制組分配指定的可用資源蔓纠,達(dá)到控制這一組進(jìn)程可用資源的目的辑畦。

  • 資源限制
    可以對任務(wù)使用的資源總額進(jìn)行限制,如設(shè)定應(yīng)用運(yùn)行時使用內(nèi)存的上限腿倚,一旦超過這個配額就發(fā)出OOM(Out of Memory)提示
  • 優(yōu)先級分配
    通過分配的CPU時間片數(shù)量和磁盤IO帶寬大小纯出,實(shí)際上就相當(dāng)于控制了任務(wù)運(yùn)行的優(yōu)先級
  • 資源統(tǒng)計(jì)
    可以統(tǒng)計(jì)系統(tǒng)的資源使用,如 CPU 使用時長敷燎、內(nèi)存用量等暂筝,這個功能非常適用于計(jì)費(fèi)
  • 任務(wù)控制
    可以對任務(wù)執(zhí)行掛起、恢復(fù)等操作
// 可以指定cpu和內(nèi)存分配大小
$ docker run -c xxx -m xxx image:tag

10. docker現(xiàn)有運(yùn)行時缺陷

  1. 基于Linux 64bit硬贯,無法在32bit的Linux/Windows/Unix環(huán)境下運(yùn)行
  2. 網(wǎng)絡(luò)管理相對簡單焕襟,主要是基于namespace隔離
  3. LXC是基于cgroup等linux kernel功能的,因此container的guest系統(tǒng)只能是linux base
  4. container隨著用戶進(jìn)程的停止而銷毀饭豹,container中的log等用戶數(shù)據(jù)不便收集
  5. 太依賴namespace

11. k8s資源預(yù)留是怎么做的

// 通過該參數(shù)
kubelet --system-reserved=memory=4Gi

12. Sandbox作用

sandbox : 沙盒
是一種安全機(jī)制鸵赖,為運(yùn)行中的容器提供隔離的環(huán)境

13. 自定義k8s controller怎么選主

**etcd鎖**

tryLock模式,每次lock都是嘗試lock拄衰,已被lock就無法鎖住它褪,同時也用了租約,過期了自動釋放

  1. 利用租約在etcd集群中創(chuàng)建一個key翘悉,這個key有兩種形態(tài)茫打,存在和不存在,而這兩種形態(tài)就是互斥量。
  2. 如果這個key不存在老赤,那么線程創(chuàng)建key轮洋,成功則獲取到鎖,該key就為存在狀態(tài)抬旺。
  3. 如果該key已經(jīng)存在弊予,那么線程就不能創(chuàng)建key,則獲取鎖失敗嚷狞。

14. 二層網(wǎng)絡(luò)块促,四層網(wǎng)絡(luò),overlay network

  • overlay
    為了滿足云計(jì)算虛擬化的網(wǎng)絡(luò)能力需求床未,逐步演化出了Overlay網(wǎng)絡(luò)技術(shù)。
    通過虛擬化技術(shù)把一個邏輯網(wǎng)絡(luò)建立在實(shí)體網(wǎng)絡(luò)之上振坚。
    在傳統(tǒng)二層網(wǎng)絡(luò)環(huán)境下薇搁,數(shù)據(jù)報文是通過查詢MAC地址表進(jìn)行二層轉(zhuǎn)發(fā),而網(wǎng)絡(luò)設(shè)備MAC地址表的容量限制了虛擬機(jī)的數(shù)量渡八。
    常用VXLAN
  • 二層網(wǎng)絡(luò):數(shù)據(jù)鏈路層(進(jìn)行數(shù)據(jù)的分包)
  • 四層網(wǎng)絡(luò):傳輸層(TCP/IP協(xié)議在這里)

15. 創(chuàng)建pod怎么實(shí)現(xiàn)sidecar注入

使用init-container 配置iptables規(guī)則來做流量劫持轉(zhuǎn)發(fā)

16. 怎么查看iptables規(guī)則

$ iptables -L

17. Pod terminating時候啃洋,ip還在嗎,還通嗎

ip在屎鳍,ping不通

18. pause容器的作用宏娄,可不可以不要?pause容器的進(jìn)程樹是怎樣的逮壁?

pause容器作為pod里其他所有容器的parent container孵坚,主要有兩個職責(zé)

  • 是pod里其他容器共享Linux namespace的基礎(chǔ)
  • 扮演PID 1(類似Linux的init進(jìn)程)的角色,負(fù)責(zé)處理僵尸進(jìn)程

進(jìn)程樹由pause容器開始窥淆,往下是業(yè)務(wù)容器

19. docker daemon掛了卖宠,容器是什么狀態(tài)?繼續(xù)運(yùn)行還是也掛了忧饭?

容器會掛

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末扛伍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子词裤,更是在濱河造成了極大的恐慌刺洒,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吼砂,死亡現(xiàn)場離奇詭異逆航,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)帅刊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門纸泡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事女揭≡榧伲” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵吧兔,是天一觀的道長磷仰。 經(jīng)常有香客問我,道長境蔼,這世上最難降的妖魔是什么灶平? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮箍土,結(jié)果婚禮上逢享,老公的妹妹穿的比我還像新娘。我一直安慰自己吴藻,他們只是感情好瞒爬,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沟堡,像睡著了一般侧但。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上航罗,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天禀横,我揣著相機(jī)與錄音,去河邊找鬼粥血。 笑死柏锄,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的立莉。 我是一名探鬼主播绢彤,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜓耻!你這毒婦竟也來了茫舶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤刹淌,失蹤者是張志新(化名)和其女友劉穎饶氏,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體有勾,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疹启,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔼卡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喊崖。...
    茶點(diǎn)故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出荤懂,到底是詐尸還是另有隱情茁裙,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布节仿,位于F島的核電站晤锥,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廊宪。R本人自食惡果不足惜矾瘾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望箭启。 院中可真熱鬧壕翩,春花似錦、人聲如沸册烈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赏僧。三九已至,卻和暖如春扭倾,著一層夾襖步出監(jiān)牢的瞬間淀零,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工膛壹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驾中,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓模聋,卻偏偏與公主長得像肩民,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子链方,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評論 2 353

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