kubernetes(k8s) (一):部署(手動,三節(jié)點(diǎn))

前言

  1. 從二進(jìn)制包部署 3節(jié)點(diǎn)環(huán)境(不要害怕笋额,并不難)
  2. 介紹部署時各組件得作用,加強(qiáng)理解篷扩。

環(huán)境

操作系統(tǒng):centos 7.5
Kubernetes版本:v1.8.13(1 master兄猩,2 node)
Docker版本: 18.03.1-ce

準(zhǔn)備工作:

裝3臺 centos7.5得機(jī)器(本實驗使用vmware虛擬機(jī), 2G內(nèi)存)
所有機(jī)器執(zhí)行如下命令:

  1. setenforce 0 (臨時關(guān)閉selinux)
  2. sed -i /SELINUX=/cSELINUX=diabled /etc/selinux/config (永久關(guān)閉selinux)
  3. systemctl stop firewalld (關(guān)閉防火墻,手動配置端口規(guī)則更好)
  4. systemctl disable firewalld (永久關(guān)閉防火墻)

下載k8s server&node 二進(jìn)制包

server包:

https://dl.k8s.io/v1.8.13/kubernetes-server-linux-amd64.tar.gz

node 包:

https://dl.k8s.io/v1.8.13/kubernetes-node-linux-amd64.tar.gz

包參考地址枢冤, 版本v1.8.13

https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.8.md#v1813

一:master 節(jié)點(diǎn)搭建

需要構(gòu)建:

  • etcd: 數(shù)據(jù)庫
  • API Server: 程序入口
  • Scheduler: 調(diào)度器
  • Controller Manager: 具體業(yè)務(wù)處理控制

1. 清空 docker環(huán)境

yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

2. 安裝etcd

etcd: 用于持久化存儲集群中所有的資源對象鸠姨,如Node、Service淹真、Pod讶迁、RC、Namespace等核蘸;API Server提供了操作etcd的封裝接口API巍糯,這些API基本上都是集群中資源對象的增刪改查及監(jiān)聽資源變化的接口。這里記住它是存放信息得數(shù)據(jù)庫即可客扎。

  1. yum install etcd -y
  2. vi /etc/etcd/etcd.conf
    修改祟峦,注意替換2個<MASTER_IP>:
ETCD_NAME="default"
ETCD_DATA_DIR="/var/lib/etcd/default"
ETCD_LISTEN_CLIENT_URLS="http://<MASTER_IP>:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://<MASTER_IP>:2379"
  1. 啟動:
    systemctl enable etcd
    systemctl start etcd

3. 構(gòu)建k8s server應(yīng)用目錄

注:應(yīng)用家目錄為 /opt/kubernetes
將剛剛下載好得kubernetes-server-linux-amd64.tar.gz 拷進(jìn)master節(jié)點(diǎn)上任意位置。

  1. tar zxvf kubernetes-server-linux-amd64.tar.gz
  2. mkdir -p /opt/kubernetes/{bin,cfg}
  3. mv kubernetes/server/bin/{kube-apiserver,kube-scheduler,kube-controller-manager,kubectl} /opt/kubernetes/bin

4. 啟動API Server 組件

API Server: 提供了資源對象的唯一操作入口虐唠,其他所有組件都必須通過它提供的API來操作資源數(shù)據(jù)搀愧,通過對相關(guān)的資源數(shù)據(jù)“全量查詢”+“變化監(jiān)聽”,這些組件可以很“實時”地完成相關(guān)的業(yè)務(wù)功能疆偿。

  1. 創(chuàng)建 apiserver配置文件
    vi /opt/kubernetes/cfg/kube-apiserver
    添加如下內(nèi)容咱筛,注意替換2個<MASTER_IP>:
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志級別
KUBE_LOG_LEVEL="--v=4"
# Etcd服務(wù)地址
KUBE_ETCD_SERVERS="--etcd-servers=http://<MASTER_IP>:2379"
# API服務(wù)監(jiān)聽地址
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
# API服務(wù)監(jiān)聽端口
KUBE_API_PORT="--insecure-port=8080"
# 對集群中成員提供API服務(wù)地址
KUBE_ADVERTISE_ADDR="--advertise-address=<MASTER_IP>"
# 允許容器請求特權(quán)模式,默認(rèn)false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# 集群分配的IP范圍
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.10.10.0/24"
  1. 注冊為systemd服務(wù)
    vi /lib/systemd/system/kube-apiserver.service
    添加如下內(nèi)容:
[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-apiserver
#ExecStart=/opt/kubernetes/bin/kube-apiserver ${KUBE_APISERVER_OPTS}
ExecStart=/opt/kubernetes/bin/kube-apiserver \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_ETCD_SERVERS} \
${KUBE_API_ADDRESS} \
${KUBE_API_PORT} \
${KUBE_ADVERTISE_ADDR} \
${KUBE_ALLOW_PRIV} \
${KUBE_SERVICE_ADDRESSES}
Restart=on-failure
[Install]
WantedBy=multi-user.target
  1. 啟動API Server
    systemctl daemon-reload
    systemctl enable kube-apiserver
    systemctl restart kube-apiserver

5. 啟動 Scheduler 組件

scheduler:集群中的調(diào)度器杆故,負(fù)責(zé)Pod在集群節(jié)點(diǎn)中的調(diào)度分配

  1. 創(chuàng)建scheduler配置文件
    vi /opt/kubernetes/cfg/kube-scheduler
    添加如下內(nèi)容迅箩,注意替換<MASTER_IP>:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=<MASTER_IP>:8080"
KUBE_LEADER_ELECT="--leader-elect"
  1. 注冊為systemd服務(wù)
    vi /lib/systemd/system/kube-scheduler.service
    添加如下內(nèi)容:
[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-scheduler
ExecStart=/opt/kubernetes/bin/kube-scheduler \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target
  1. 啟動Scheduler
    systemctl daemon-reload
    systemctl enable kube-scheduler
    systemctl restart kube-scheduler

6. 啟動Controller Manager組件

controller manager:集群內(nèi)部的管理控制中心,其主要目的是實現(xiàn)Kubernetes集群的故障檢測和恢復(fù)的自動化工作处铛,比如根據(jù)RC的定義完成Pod的復(fù)制或移除饲趋,以確保Pod實例數(shù)符合RC副本的定義;根據(jù)Service與Pod的管理關(guān)系撤蟆,完成服務(wù)的Endpoints對象的創(chuàng)建和更新渊鞋;其他諸如Node的發(fā)現(xiàn)、管理和狀態(tài)監(jiān)控恩脂、死亡容器所占磁盤空間及本地緩存的鏡像文件的清理等工作也是由Controller Manager完成的畸颅。

  1. 創(chuàng)建controller manager 配置文件
    vi /opt/kubernetes/cfg/kube-controller-manager
    添加如下內(nèi)容,注意替換<MASTER_IP>:
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=4"
KUBE_MASTER="--master=<MASTER_IP>:8080"
  1. 注冊為systemd服務(wù)
    vi /lib/systemd/system/kube-controller-manager.service
    添加如下內(nèi)容:
[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-controller-manager
ExecStart=/opt/kubernetes/bin/kube-controller-manager \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${KUBE_MASTER} \
${KUBE_LEADER_ELECT}
Restart=on-failure
[Install]
WantedBy=multi-user.target
  1. 啟動Controller Manager
    systemctl daemon-reload
    systemctl enable kube-controller-manager
    systemctl restart kube-controller-manager

7. 查看服務(wù)啟動情況

ps aux | grep kube
可以看到3個組件得啟動情況如下:

image.png

二:node節(jié)點(diǎn)搭建

需要構(gòu)建:

  • docker
  • kubelet: 具體業(yè)務(wù)處理者
  • kube-proxy: 負(fù)載均衡器

1. docker環(huán)境

  1. 清空舊環(huán)境:
    yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine
  2. 安裝docker:
    yum install -y yum-utils device-mapper-persistent-data lvm2
    yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    yum install docker-ce
    systemctl start docker
    systemctl enable docker

2. 構(gòu)建k8s node節(jié)點(diǎn)應(yīng)用目錄

注:應(yīng)用家目錄為 /opt/kubernetes
將剛剛下載好得kubernetes-node-linux-amd64.tar.gz 拷進(jìn)node節(jié)點(diǎn)上任意位置讨衣。

  1. tar zxvf kubernetes-node-linux-amd64.tar.gz
  2. mkdir -p /opt/kubernetes/{bin,cfg}
  3. mv kubernetes/node/bin/{kubelet,kube-proxy} /opt/kubernetes/bin/

3. 啟動Kubelet組件

kubelet: 負(fù)責(zé)本Node節(jié)點(diǎn)上的Pod的創(chuàng)建换棚、修改、監(jiān)控反镇、刪除等全生命周期管理固蚤,同時Kubelet定時“上報”本Node的狀態(tài)信息到API Server里。

  1. 創(chuàng)建kubeconfig配置文件歹茶,用于連接master節(jié)點(diǎn)api server
    vi /opt/kubernetes/cfg/kubelet.kubeconfig
    添加如下內(nèi)容夕玩,注意替換<MASTER_IP>:
apiVersion: v1
kind: Config
clusters:
  - cluster:
      server: http://<MASTER_IP>:8080
    name: local
contexts:
  - context:
      cluster: local
    name: local
current-context: local
  1. 創(chuàng)建kublet配置文件
    vi /opt/kubernetes/cfg/kubelet
    添加如下內(nèi)容你弦,注意替換兩個<NODE_IP>:
# 啟用日志標(biāo)準(zhǔn)錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志級別
KUBE_LOG_LEVEL="--v=4"
# Kubelet服務(wù)IP地址
NODE_ADDRESS="--address=<NODE_IP>"
# Kubelet服務(wù)端口
NODE_PORT="--port=10250"
# 自定義節(jié)點(diǎn)名稱
NODE_HOSTNAME="--hostname-override=<NODE_IP>"
# kubeconfig路徑,指定連接API服務(wù)器
KUBELET_KUBECONFIG="--kubeconfig=/opt/kubernetes/cfg/kubelet.kubeconfig"
# 允許容器請求特權(quán)模式风秤,默認(rèn)false
KUBE_ALLOW_PRIV="--allow-privileged=false"
# DNS信息
KUBELET_DNS_IP="--cluster-dns=10.10.10.2"
KUBELET_DNS_DOMAIN="--cluster-domain=cluster.local"
# 禁用使用Swap
KUBELET_SWAP="--fail-swap-on=false"
  1. 注冊systemd服務(wù)
    vi /lib/systemd/system/kubelet.service
    添加如下內(nèi)容:
[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kubelet
ExecStart=/opt/kubernetes/bin/kubelet \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_ADDRESS} \
${NODE_PORT} \
${NODE_HOSTNAME} \
${KUBELET_KUBECONFIG} \
${KUBE_ALLOW_PRIV} \
${KUBELET_DNS_IP} \
${KUBELET_DNS_DOMAIN} \
${KUBELET_SWAP}
Restart=on-failure
KillMode=process
[Install]
WantedBy=multi-user.target
  1. 啟動Kubelet
    啟動之前要先關(guān)閉swap
    swapoff -a
    systemctl daemon-reload
    systemctl enable kubelet
    systemctl restart kubelet

4. 啟動kube-proxy組件

kube-proxy: 實現(xiàn)了Service的代理與軟件模式的負(fù)載均衡器鳖目。創(chuàng)建了service得pods,此組件決定由哪個pod進(jìn)行服務(wù)缤弦。

  1. 創(chuàng)建kube-proxy配置文件
    vi /opt/kubernetes/cfg/kube-proxy
    添加如下內(nèi)容领迈,注意替換<NODE_IP>和<MASTER_IP>:
# 啟用日志標(biāo)準(zhǔn)錯誤
KUBE_LOGTOSTDERR="--logtostderr=true"
# 日志級別
KUBE_LOG_LEVEL="--v=4"
# 自定義節(jié)點(diǎn)名稱
NODE_HOSTNAME="--hostname-override=<NODE_IP>"
# API服務(wù)地址
KUBE_MASTER="--master=http://<MASTER_IP>:8080"
  1. 注冊systemd服務(wù)
    vi /lib/systemd/system/kube-proxy.service
    添加如下內(nèi)容:
[Unit]
Description=Kubernetes Proxy
After=network.target
[Service]
EnvironmentFile=-/opt/kubernetes/cfg/kube-proxy
ExecStart=/opt/kubernetes/bin/kube-proxy \
${KUBE_LOGTOSTDERR} \
${KUBE_LOG_LEVEL} \
${NODE_HOSTNAME} \
${KUBE_MASTER}
Restart=on-failure
[Install]
WantedBy=multi-user.target
  1. 啟動kube-proxy
    systemctl daemon-reload
    systemctl enable kube-proxy
    systemctl restart kube-proxy

5. 查看服務(wù)啟動情況

ps aux |grep kube
可以看到兩個組件得啟動詳情如下:

image.png

三:查看集群狀態(tài)

在master節(jié)點(diǎn)執(zhí)行如下命令:

  1. 將可執(zhí)行文件添加到系統(tǒng)變量,方便使用
    echo "export PATH=$PATH:/opt/kubernetes/bin" >> /etc/profile
    source /etc/profile
  2. 查看集群節(jié)點(diǎn)
    kubectl get node
    顯示如下:
    image.png

四:增加新節(jié)點(diǎn)到集群

至此碍沐,已經(jīng)完成了雙節(jié)點(diǎn)搭建狸捅。第三個node節(jié)點(diǎn)得搭建參考前面node節(jié)點(diǎn)搭建。
只需修改kubelet配置文件中的--address和--hostname-override選項為本機(jī)IP累提。


image.png

五: 進(jìn)階

以上3節(jié)點(diǎn)部署只是非吵竞龋基礎(chǔ)得版本,還有許多待改進(jìn)得地方:

  • etcd&apiserver集群模式
  • Flannel網(wǎng)絡(luò)部署:當(dāng)我們啟動 Docker 后會有一個用于和容器進(jìn)行交互的 IP 地址斋陪,如果不去管理的話可能這個 IP 地址在各個機(jī)器上是一樣的朽褪,并且僅限于在本機(jī)上進(jìn)行通信,無法訪問到其他機(jī)器上的 Docker 容器无虚。Flannel 的目的就是為集群中的所有節(jié)點(diǎn)重新規(guī)劃 IP 地址的使用規(guī)則缔赠,從而使得不同節(jié)點(diǎn)上的容器能夠獲得同屬一個內(nèi)網(wǎng)且不重復(fù)的 IP 地址,并讓屬于不同節(jié)點(diǎn)上的容器能夠直接通過內(nèi)網(wǎng) IP 通信友题。
下一章將介紹初步使用k8s

http://www.reibang.com/p/bc015e562b16

注意事項:

  1. master節(jié)點(diǎn)上得etcd和apiserver啟動順序有要求:先啟動etcd再啟動apiserver
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嗤堰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子度宦,更是在濱河造成了極大的恐慌踢匣,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戈抄,死亡現(xiàn)場離奇詭異离唬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)划鸽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門男娄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漾稀,你說我怎么就攤上這事〗ㄌ保” “怎么了崭捍?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長啰脚。 經(jīng)常有香客問我殷蛇,道長实夹,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任粒梦,我火速辦了婚禮亮航,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匀们。我一直安慰自己缴淋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布泄朴。 她就那樣靜靜地躺著重抖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪祖灰。 梳的紋絲不亂的頭發(fā)上钟沛,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機(jī)與錄音局扶,去河邊找鬼恨统。 笑死,一個胖子當(dāng)著我的面吹牛三妈,可吹牛的內(nèi)容都是我干的畜埋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沈跨,長吁一口氣:“原來是場噩夢啊……” “哼由捎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起饿凛,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤狞玛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涧窒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體心肪,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年纠吴,在試婚紗的時候發(fā)現(xiàn)自己被綠了硬鞍。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡戴已,死狀恐怖固该,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糖儡,我是刑警寧澤伐坏,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站握联,受9級特大地震影響桦沉,放射性物質(zhì)發(fā)生泄漏每瞒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一纯露、第九天 我趴在偏房一處隱蔽的房頂上張望剿骨。 院中可真熱鬧,春花似錦埠褪、人聲如沸浓利。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荞膘。三九已至,卻和暖如春玉工,著一層夾襖步出監(jiān)牢的瞬間羽资,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工遵班, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屠升,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓狭郑,卻偏偏與公主長得像腹暖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子翰萨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

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