二進(jìn)制方式搭建k8s集群-(2)核心模塊部署

SourceURL:https://m.imooc.com/article/details?article_id=24676

1. 部署ETCD(主節(jié)點)

1.1 簡介

kubernetes需要存儲很多東西汹桦,像它本身的節(jié)點信息,組件信息,還有通過kubernetes運(yùn)行的pod寡夹,deployment颜及,service等等词身。都需要持久化闯捎。etcd就是它的數(shù)據(jù)中心习劫。生產(chǎn)環(huán)境中為了保證數(shù)據(jù)中心的高可用和數(shù)據(jù)的一致性虽风,一般會部署最少三個節(jié)點棒口。我們這里以學(xué)習(xí)為主就只在主節(jié)點部署一個實例。

如果你的環(huán)境已經(jīng)有了etcd服務(wù)(不管是單點還是集群)辜膝,可以忽略這一步无牵。前提是你在生成配置的時候填寫了自己的etcd endpoint哦~

1.2 部署

etcd的二進(jìn)制文件和服務(wù)的配置我們都已經(jīng)準(zhǔn)備好,現(xiàn)在的目的就是把它做成系統(tǒng)服務(wù)并啟動厂抖。

#把服務(wù)配置文件copy到系統(tǒng)服務(wù)目錄
$ cp ~/kubernetes-starter/target/master-node/etcd.service /lib/systemd/system/
#enable服務(wù)
$ systemctl enable etcd.service
#創(chuàng)建工作目錄(保存數(shù)據(jù)的地方)
$ mkdir -p /var/lib/etcd
# 啟動服務(wù)
$ service etcd start
# 查看服務(wù)日志茎毁,看是否有錯誤信息,確保服務(wù)正常
$ journalctl -f -u etcd.service

2. 部署APIServer(主節(jié)點)

2.1 簡介

kube-apiserver是Kubernetes最重要的核心組件之一忱辅,主要提供以下的功能

  • 提供集群管理的REST API接口七蜘,包括認(rèn)證授權(quán)(我們現(xiàn)在沒有用到)數(shù)據(jù)校驗以及集群狀態(tài)變更等
  • 提供其他模塊之間的數(shù)據(jù)交互和通信的樞紐(其他模塊通過API Server查詢或修改數(shù)據(jù),只有API Server才直接操作etcd)

生產(chǎn)環(huán)境為了保證apiserver的高可用一般會部署2+個節(jié)點墙懂,在上層做一個lb做負(fù)載均衡橡卤,比如haproxy。由于單節(jié)點和多節(jié)點在apiserver這一層說來沒什么區(qū)別损搬,所以我們學(xué)習(xí)部署一個節(jié)點就足夠啦

2.2 部署

APIServer的部署方式也是通過系統(tǒng)服務(wù)碧库。部署流程跟etcd完全一樣,不再注釋

$ cp target/master-node/kube-apiserver.service /lib/systemd/system/
$ systemctl enable kube-apiserver.service
$ service kube-apiserver start
$ journalctl -f -u kube-apiserver

2.3 重點配置說明

> [Unit]
> Description=Kubernetes API Server
> ...
> [Service]
> #可執(zhí)行文件的位置
> ExecStart=/home/michael/bin/kube-apiserver \
> #非安全端口(8080)綁定的監(jiān)聽地址 這里表示監(jiān)聽所有地址
> --insecure-bind-address=0.0.0.0 \
> #不使用https
> --kubelet-https=false \
> #kubernetes集群的虛擬ip的地址范圍
> --service-cluster-ip-range=10.68.0.0/16 \
> #service的nodeport的端口范圍限制
> --service-node-port-range=20000-40000 \
> #很多地方都需要和etcd打交道场躯,也是唯一可以直接操作etcd的模塊
> --etcd-servers=[http://192.168.1.102:2379](http://192.168.1.102:2379) \
> ...

3. 部署ControllerManager(主節(jié)點)

3.1 簡介

Controller Manager由kube-controller-manager和cloud-controller-manager組成谈为,是Kubernetes的大腦,它通過apiserver監(jiān)控整個集群的狀態(tài)踢关,并確保集群處于預(yù)期的工作狀態(tài)伞鲫。
kube-controller-manager由一系列的控制器組成,像Replication Controller控制副本签舞,Node Controller節(jié)點控制秕脓,Deployment Controller管理deployment等等
cloud-controller-manager在Kubernetes啟用Cloud Provider的時候才需要柒瓣,用來配合云服務(wù)提供商的控制

controller-manager、scheduler和apiserver 三者的功能緊密相關(guān)吠架,一般運(yùn)行在同一個機(jī)器上芙贫,我們可以把它們當(dāng)做一個整體來看,所以保證了apiserver的高可用即是保證了三個模塊的高可用傍药。也可以同時啟動多個controller-manager進(jìn)程磺平,但只有一個會被選舉為leader提供服務(wù)。

3.2 部署

通過系統(tǒng)服務(wù)方式部署

$ cp target/master-node/kube-controller-manager.service /lib/systemd/system/
$ systemctl enable kube-controller-manager.service
$ service kube-controller-manager start
$ journalctl -f -u kube-controller-manager

3.3 重點配置說明

> [Unit]
> Description=Kubernetes Controller Manager
> ...
> [Service]
> ExecStart=/home/michael/bin/kube-controller-manager \
> #對外服務(wù)的監(jiān)聽地址拐辽,這里表示只有本機(jī)的程序可以訪問它
> --address=127.0.0.1 \
> #apiserver的url
> --master=[http://127.0.0.1:8080](http://127.0.0.1:8080) \
> #服務(wù)虛擬ip范圍拣挪,同apiserver的配置
> --service-cluster-ip-range=10.68.0.0/16 \
> #pod的ip地址范圍
> --cluster-cidr=172.20.0.0/16 \
> #下面兩個表示不使用證書,用空值覆蓋默認(rèn)值
> --cluster-signing-cert-file= \
> --cluster-signing-key-file= \
> ...

4. 部署Scheduler(主節(jié)點)

4.1 簡介

kube-scheduler負(fù)責(zé)分配調(diào)度Pod到集群內(nèi)的節(jié)點上俱诸,它監(jiān)聽kube-apiserver菠劝,查詢還未分配Node的Pod,然后根據(jù)調(diào)度策略為這些Pod分配節(jié)點睁搭。我們前面講到的kubernetes的各種調(diào)度策略就是它實現(xiàn)的赶诊。

4.2 部署

通過系統(tǒng)服務(wù)方式部署

$ cp target/master-node/kube-scheduler.service /lib/systemd/system/
$ systemctl enable kube-scheduler.service
$ service kube-scheduler start
$ journalctl -f -u kube-scheduler

4.3 重點配置說明

> [Unit]
> Description=Kubernetes Scheduler
> ...
> [Service]
> ExecStart=/home/michael/bin/kube-scheduler \
> #對外服務(wù)的監(jiān)聽地址,這里表示只有本機(jī)的程序可以訪問它
> --address=127.0.0.1 \
> #apiserver的url
> --master=[http://127.0.0.1:8080](http://127.0.0.1:8080) \
> ...

5. 部署CalicoNode(所有節(jié)點)

5.1 簡介

Calico實現(xiàn)了CNI接口园骆,是kubernetes網(wǎng)絡(luò)方案的一種選擇舔痪,它一個純?nèi)龑拥臄?shù)據(jù)中心網(wǎng)絡(luò)方案(不需要Overlay),并且與OpenStack遇伞、Kubernetes辙喂、AWS、GCE等IaaS和容器平臺都有良好的集成鸠珠。
Calico在每一個計算節(jié)點利用Linux Kernel實現(xiàn)了一個高效的vRouter來負(fù)責(zé)數(shù)據(jù)轉(zhuǎn)發(fā)巍耗,而每個vRouter通過BGP協(xié)議負(fù)責(zé)把自己上運(yùn)行的workload的路由信息像整個Calico網(wǎng)絡(luò)內(nèi)傳播——小規(guī)模部署可以直接互聯(lián),大規(guī)模下可通過指定的BGP route reflector來完成渐排。 這樣保證最終所有的workload之間的數(shù)據(jù)流量都是通過IP路由的方式完成互聯(lián)的炬太。

5.2 部署

calico是通過系統(tǒng)服務(wù)+docker方式完成的

$ cp target/all-node/kube-calico.service /lib/systemd/system/
$ systemctl enable kube-calico.service
$ service kube-calico start
$ journalctl -f -u kube-calico

5.3 calico可用性驗證

查看容器運(yùn)行情況

$ docker ps
CONTAINER ID   IMAGE                COMMAND        CREATED ...
4d371b58928b   calico/node:v2.6.2   "start_runit"  3 hours ago...

查看節(jié)點運(yùn)行情況

$ calicoctl node status
Calico process is running.
IPv4 BGP status
+---------------+-------------------+-------+----------+-------------+
| PEER ADDRESS  |     PEER TYPE     | STATE |  SINCE   |    INFO     |
+---------------+-------------------+-------+----------+-------------+
| 192.168.1.103 | node-to-node mesh | up    | 13:13:13 | Established |
+---------------+-------------------+-------+----------+-------------+
IPv6 BGP status
No IPv6 peers found.

查看端口BGP 協(xié)議是通過TCP 連接來建立鄰居的,因此可以用netstat 命令驗證 BGP Peer

$ netstat -natp|grep ESTABLISHED|grep 179
tcp        0      0 192.168.1.102:60959     192.168.1.103:179       ESTABLISHED 29680/bird

查看集群ippool情況

$ calicoctl get ipPool -o yaml
- apiVersion: v1
  kind: ipPool
  metadata:
    cidr: 172.20.0.0/16
  spec:
    nat-outgoing: true

5.4 重點配置說明

> [Unit]
> Description=calico node
> ...
> [Service]
> #以docker方式運(yùn)行
> ExecStart=/usr/bin/docker run --net=host --privileged --name=calico-node \
> #指定etcd endpoints(這里主要負(fù)責(zé)網(wǎng)絡(luò)元數(shù)據(jù)一致性驯耻,確保Calico網(wǎng)絡(luò)狀態(tài)的準(zhǔn)確性)
> -e ETCD_ENDPOINTS=[http://192.168.1.102:2379](http://192.168.1.102:2379) \
> #網(wǎng)絡(luò)地址范圍(同上面ControllerManager)
> -e CALICO_IPV4POOL_CIDR=172.20.0.0/16 \
> #鏡像名亲族,為了加快大家的下載速度,鏡像都放到了阿里云上
> registry.cn-hangzhou.aliyuncs.com/imooc/calico-node:v2.6.2

6. 配置kubectl命令(任意節(jié)點)

6.1 簡介

kubectl是Kubernetes的命令行工具可缚,是Kubernetes用戶和管理員必備的管理工具霎迫。
kubectl提供了大量的子命令,方便管理Kubernetes集群中的各種功能帘靡。

6.2 初始化

使用kubectl的第一步是配置Kubernetes集群以及認(rèn)證方式知给,包括:

  • cluster信息:api-server地址
  • 用戶信息:用戶名、密碼或密鑰
  • Context:cluster、用戶信息以及Namespace的組合

我們這沒有安全相關(guān)的東西涩赢,只需要設(shè)置好api-server和上下文就好啦:

#指定apiserver地址(ip替換為你自己的api-server地址)
kubectl config set-cluster kubernetes  --server=http://192.168.1.102:8080
#指定設(shè)置上下文戈次,指定cluster
kubectl config set-context kubernetes --cluster=kubernetes
#選擇默認(rèn)的上下文
kubectl config use-context kubernetes

通過上面的設(shè)置最終目的是生成了一個配置文件:~/.kube/config,當(dāng)然你也可以手寫或復(fù)制一個文件放在那筒扒,就不需要上面的命令了怯邪。

7. 配置kubelet(工作節(jié)點)

7.1 簡介

每個工作節(jié)點上都運(yùn)行一個kubelet服務(wù)進(jìn)程,默認(rèn)監(jiān)聽10250端口花墩,接收并執(zhí)行master發(fā)來的指令悬秉,管理Pod及Pod中的容器。每個kubelet進(jìn)程會在API Server上注冊節(jié)點自身信息观游,定期向master節(jié)點匯報節(jié)點的資源使用情況搂捧,并通過cAdvisor監(jiān)控節(jié)點和容器的資源。

7.2 部署

通過系統(tǒng)服務(wù)方式部署懂缕,但步驟會多一些,具體如下:

#確保相關(guān)目錄存在
$ mkdir -p /var/lib/kubelet
$ mkdir -p /etc/kubernetes
$ mkdir -p /etc/cni/net.d

#復(fù)制kubelet服務(wù)配置文件
$ cp target/worker-node/kubelet.service /lib/systemd/system/
#復(fù)制kubelet依賴的配置文件
$ cp target/worker-node/kubelet.kubeconfig /etc/kubernetes/
#復(fù)制kubelet用到的cni插件配置文件
$ cp target/worker-node/10-calico.conf /etc/cni/net.d/

$ systemctl enable kubelet.service
$ service kubelet start
$ journalctl -f -u kubelet

7.3 重點配置說明

kubelet.service

> [Unit]
> Description=Kubernetes Kubelet
> [Service]
> #kubelet工作目錄王凑,存儲當(dāng)前節(jié)點容器搪柑,pod等信息
> WorkingDirectory=/var/lib/kubelet
> ExecStart=/home/michael/bin/kubelet \
> #對外服務(wù)的監(jiān)聽地址
> --address=192.168.1.103 \
> #指定基礎(chǔ)容器的鏡像,負(fù)責(zé)創(chuàng)建Pod 內(nèi)部共享的網(wǎng)絡(luò)索烹、文件系統(tǒng)等工碾,這個基礎(chǔ)容器非常重要:K8S每一個運(yùn)行的 POD里面必然包含這個基礎(chǔ)容器,如果它沒有運(yùn)行起來那么你的POD 肯定創(chuàng)建不了
> --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/imooc/pause-amd64:3.0 \
> #訪問集群方式的配置百姓,如api-server地址等
> --kubeconfig=/etc/kubernetes/kubelet.kubeconfig \
> #聲明cni網(wǎng)絡(luò)插件
> --network-plugin=cni \
> #cni網(wǎng)絡(luò)配置目錄渊额,kubelet會讀取該目錄下得網(wǎng)絡(luò)配置
> --cni-conf-dir=/etc/cni/net.d \
> #指定 kubedns 的 Service IP(可以先分配,后續(xù)創(chuàng)建 kubedns 服務(wù)時指定該 IP)垒拢,--cluster-domain 指定域名后綴旬迹,這兩個參數(shù)同時指定后才會生效
> --cluster-dns=10.68.0.2 \
> ...

kubelet.kubeconfig
kubelet依賴的一個配置,格式看也是我們后面經(jīng)常遇到的yaml格式求类,描述了kubelet訪問apiserver的方式

> apiVersion: v1
> clusters:
> - cluster:
> #跳過tls奔垦,即是kubernetes的認(rèn)證
> insecure-skip-tls-verify: true
> #api-server地址
> server: [http://192.168.1.102:8080](http://192.168.1.102:8080)
> ...

10-calico.conf
calico作為kubernets的CNI插件的配置

{  
  "name": "calico-k8s-network",  
  "cniVersion": "0.1.0",  
  "type": "calico",  
    <!--etcd的url-->
    "ed_endpoints": "http://192.168.1.102:2379",  
    "logevel": "info",  
    "ipam": {  
        "type": "calico-ipam"  
   },  
    "kubernetes": {  
        <!--api-server的url-->
        "k8s_api_root": "http://192.168.1.102:8080"  
    }  
}  

8. 小試牛刀

到這里最基礎(chǔ)的kubernetes集群就可以工作了。下面我們就來試試看怎么去操作尸疆,控制它椿猎。
我們從最簡單的命令開始,嘗試一下kubernetes官方的入門教學(xué):playground的內(nèi)容寿弱。了解如何創(chuàng)建pod犯眠,deployments,以及查看他們的信息症革,深入理解他們的關(guān)系筐咧。
具體內(nèi)容請看慕課網(wǎng)的視頻吧: 《Docker+k8s微服務(wù)容器化實踐》

9. 為集群增加service功能 - kube-proxy(工作節(jié)點)

9.1 簡介

每臺工作節(jié)點上都應(yīng)該運(yùn)行一個kube-proxy服務(wù),它監(jiān)聽API server中service和endpoint的變化情況地沮,并通過iptables等來為服務(wù)配置負(fù)載均衡嗜浮,是讓我們的服務(wù)在集群外可以被訪問到的重要方式羡亩。

9.2 部署

通過系統(tǒng)服務(wù)方式部署:

#確保工作目錄存在
$ mkdir -p /var/lib/kube-proxy
#復(fù)制kube-proxy服務(wù)配置文件
$ cp target/worker-node/kube-proxy.service /lib/systemd/system/
#復(fù)制kube-proxy依賴的配置文件
$ cp target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/

$ systemctl enable kube-proxy.service
$ service kube-proxy start
$ journalctl -f -u kube-proxy

9.3 重點配置說明

**kube-proxy.service**

> [Unit]
> Description=Kubernetes Kube-Proxy Server
> ...
> [Service]
> #工作目錄
> WorkingDirectory=/var/lib/kube-proxy
> ExecStart=/home/michael/bin/kube-proxy \
> #監(jiān)聽地址
> --bind-address=192.168.1.103 \
> #依賴的配置文件,描述了kube-proxy如何訪問api-server
> --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
> ...

kube-proxy.kubeconfig
配置了kube-proxy如何訪問api-server危融,內(nèi)容與kubelet雷同畏铆,不再贅述。

10. 為集群增加dns功能 - kube-dns(app)

10.1 簡介

kube-dns為Kubernetes集群提供命名服務(wù)吉殃,主要用來解析集群服務(wù)名和Pod的hostname辞居。目的是讓pod可以通過名字訪問到集群內(nèi)服務(wù)。它通過添加A記錄的方式實現(xiàn)名字和service的解析蛋勺。普通的service會解析到service-ip瓦灶。headless service會解析到pod列表。

10.2 部署

通過kubernetes應(yīng)用的方式部署
kube-dns.yaml文件基本與官方一致(除了鏡像名不同外)抱完。
里面配置了多個組件贼陶,之間使用”---“分隔

#到kubernetes-starter目錄執(zhí)行命令
$ kubectl create -f target/services/kube-dns.yaml

10.3 重點配置說明

請直接參考配置文件中的注釋。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巧娱,一起剝皮案震驚了整個濱河市碉怔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禁添,老刑警劉巖撮胧,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異老翘,居然都是意外死亡芹啥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門铺峭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來墓怀,“玉大人,你說我怎么就攤上這事逛薇∞嗵郏” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵永罚,是天一觀的道長啤呼。 經(jīng)常有香客問我,道長呢袱,這世上最難降的妖魔是什么官扣? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮羞福,結(jié)果婚禮上惕蹄,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好卖陵,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布遭顶。 她就那樣靜靜地躺著,像睡著了一般泪蔫。 火紅的嫁衣襯著肌膚如雪棒旗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天撩荣,我揣著相機(jī)與錄音铣揉,去河邊找鬼。 笑死餐曹,一個胖子當(dāng)著我的面吹牛逛拱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播台猴,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼朽合,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了卿吐?” 一聲冷哼從身側(cè)響起旁舰,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎嗡官,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毯焕,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡衍腥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纳猫。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婆咸。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芜辕,靈堂內(nèi)的尸體忽然破棺而出尚骄,到底是詐尸還是另有隱情,我是刑警寧澤侵续,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布倔丈,位于F島的核電站,受9級特大地震影響状蜗,放射性物質(zhì)發(fā)生泄漏需五。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一轧坎、第九天 我趴在偏房一處隱蔽的房頂上張望宏邮。 院中可真熱鬧,春花似錦、人聲如沸蜜氨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽飒炎。三九已至埋哟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間厌丑,已是汗流浹背定欧。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留怒竿,地道東北人砍鸠。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像耕驰,于是被迫代替她去往敵國和親爷辱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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