1, 操作系統(tǒng)
Centos 7 或者centos7 以上的版本
備注 :
? (1)操作系統(tǒng)最少兩塊盤,一塊磁盤用于掛載系統(tǒng)幌绍,一塊磁盤用于存儲(chǔ)數(shù)據(jù)修械。因?yàn)?docker 運(yùn)行起來以后會(huì)占用系統(tǒng)比較大的磁盤空間趾牧,我會(huì)在后面進(jìn)行數(shù)據(jù)磁盤分區(qū),單獨(dú)用于掛載docker 的目錄 /var/lib/docker 肯污。如果不給 /var/lib/docker 掛載單獨(dú)的分區(qū)翘单,docker 會(huì)自動(dòng)默認(rèn)掛載在根分區(qū)目錄下面,也就是系統(tǒng)磁盤分區(qū)下面仇箱,導(dǎo)致系統(tǒng)分區(qū)占用空間過大,嚴(yán)重情況可能導(dǎo)致服務(wù)器無法ssh 連接东羹。
? ? (2) 操作系統(tǒng)不要 yum 安裝docker,后續(xù)腳本會(huì)自動(dòng)安裝docker
2剂桥, 腳本下載
下載地址 :https://pan.baidu.com/s/1pKD7RKZ (我的百度網(wǎng)盤,文件較大属提,請(qǐng)耐心下載)
下載的文件夾名稱為: k8s-deploy
一鍵安裝腳本下載完成后权逗,上傳至服務(wù)器上面的 /root 目錄下面
3,環(huán)境準(zhǔn)備
(1) 本機(jī) ssh 互信?
本機(jī)localhost與root之間需要實(shí)現(xiàn)互信冤议,在后面的etcd 安裝過程中需要會(huì)使用到斟薇,不然需要手動(dòng)輸入密碼,比較浪費(fèi)時(shí)間恕酸。
按照下面步驟執(zhí)行 :
? ? (1) ssh-keygen -t? rsa? ? ? ? // 執(zhí)行該命令后一直按enter 鍵堪滨,將會(huì)生成本機(jī)的公鑰以及私鑰
? ? (2) 第一步執(zhí)行完成后,執(zhí)行 :?
? ? ? ? ssh-copy-id root@localhost? ? ? //ssh-copy-id 將公鑰寫入本機(jī)authorized_key 文件中蕊温,實(shí)現(xiàn)無密碼登錄localhost,期間會(huì)要求輸入root 用戶的密碼袱箱,輸入root 賬戶密碼即可。
(3) 關(guān)閉防火墻以及selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0? //關(guān)閉selinux
(4) 卸載systemd-python
因?yàn)閟ystemd-python 會(huì)阻擋 kubernetes 的安裝
yum -y remove systemd-python
(5) 磁盤分區(qū) 义矛,格式化,? 創(chuàng)建docker 目錄
? ? ? ? (1) 創(chuàng)建docker 數(shù)據(jù)目錄
? ? ? ? ? ? 執(zhí)行該命令 : mkdir -p /var/lib/docker
? ? ? ? (2) 使用fdisk 或者 parted 對(duì)于數(shù)據(jù)磁盤進(jìn)行分區(qū) (此處不做詳解发笔,網(wǎng)上教程非常多,也非常簡(jiǎn)單)
? ? ? ? ? ? ? ? 按照我自己的虛擬機(jī) 硬盤凉翻,我分出了一個(gè) /dev/sda3 的分區(qū)了讨,(大家可以對(duì)自己的非系統(tǒng)盤,也就是數(shù)據(jù)磁盤進(jìn)行分區(qū))
? ? ? ? ? (3) 磁盤分區(qū)格式化
? ? ? ? ? ? ? ? 執(zhí)行該命令: mkfs.ext3 /dev/sda3? ? ? ? ? ? //把該磁盤分區(qū)格式為ext3 格式
? ? ? ? ? ? ? ? 執(zhí)行該命令:blkid? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //結(jié)果如下
? ? ? ? ? ? ? 將 /dev/sda3 的? UUID 寫入 /etc/fstab制轰,并且把/var/lib/docker 寫入進(jìn)去前计,保存退出
? ? ? ? ? ? ? ? 然后執(zhí)行該命令: mount? -a? ? ? ? ? //刷新系統(tǒng)分區(qū)表,進(jìn)行掛載目錄
? ? ? ? ? ? ? ? 繼續(xù)執(zhí)行 : df -h? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //查看目錄是否掛載成功
? ? ? ? ? ? ? ? 結(jié)果顯示: 目錄掛載成功 垃杖,分給docker 92 G 的可用容量
4残炮,安裝過程? (以下為我的虛擬機(jī)安裝過程)
? ? ? ? ? (1) cd /root/k8s-deploy? ? //進(jìn)入k8s 腳本安裝目錄
? ? ? ? ? (2)修改k8s-deploy.sh
? ? vim k8s-deploy.sh? ? //修改k8s-deploy.sh
? ? ? ? ? ?第5 行? :? ? HTTP—SERVER=192.168.2.187 ? ? ? ?//此處的IP為我自己的虛擬機(jī)IP
? ? ? ? ? ? 第6 行? :? ? KUBE_HA=false ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //因?yàn)槭箚蝝aster,所以 改為 ? false
? ? ? ? ? 第215行 :? ? grep -i `hostname`? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 中間添加 -i 參數(shù)
? ? ? ? (3)? 修改 deploy-etcd.sh
? ? ? ? ? ? ? ? ? cd ? etcd
? ? ? vim .deploy-etcd.sh? ? ? //修改 deploy-etcd.sh
? ? ? ? ? ? 第6 行? ? :declare -A NODE_MAP=( ["etcd0"]="192.168.2.187" )
? ? ? ? ? ? 第31 行 :ETCD_INITIAL_CLUSTER="etcd0=http://${NODE_MAP['etcd0']}:2380"
(4) 進(jìn)行安裝etcd
備注 :
? ? ? ?首先將 /etc/yum.repos.d/ 下面的文件移動(dòng)至別處,等所有安裝完成了在移回來缩滨。因?yàn)槭请x線安裝包势就,不需要下載泉瞻。
執(zhí)行該命令:?
cd /root/k8s-deploy/etcd
chmod +x ?deploy-etcd.sh? ? // 給該腳本賦予可行性權(quán)限
./deploy-etcd.sh? ? ? //這個(gè)命令前面有點(diǎn),不能遺漏
執(zhí)行完苞冯,執(zhí)行該命令: etcdctl cluster-health 和systemctl status etcd.service
正常狀態(tài)為:
etcd 安裝完成
(5) 安裝k8s 以及docker?
cd /root/k8s-deploy/?
chmod +x k8s-deploy.sh ? ? ? ?// 給該腳本賦予可行性權(quán)限
在當(dāng)前目錄啟動(dòng)一個(gè)臨時(shí) HTTPServer,用來拉取腳本袖牙,執(zhí)行命令如下:
nohup python -m SimpleHTTPServer &
使用losf -i: 8000 查看端口是否被占用,然后執(zhí)行下面的命令舅锄,查看是否可以獲取腳本
curl ?localhost:8000
即為臨時(shí)HTTPServer 服務(wù)啟動(dòng)起來了鞭达。
下面進(jìn)行安裝k8s 以及docker,執(zhí)行下列命令:
? ? ? ? 備注:因?yàn)槭菃蝝aster,所以下面寫localhost ,如果是多個(gè)master,必須寫啟動(dòng)HTTPServer 那臺(tái)服務(wù)器的IP。而且下面的命令必須保證以前沒有docker 的殘留文件或者安裝過docker 皇忿,如果有docker 的殘留文件畴蹭,全部卸載干凈。
curl -L http://localhost:8000/k8s-deploy.sh | bash -s master --api-advertise-addresses=192.168.2.187 --external-etcd-endpoints=http://192.168.2.187:2379
期間安裝過程時(shí)間較長(zhǎng)鳍烁,請(qǐng)耐心等待叨襟。。幔荒。糊闽。。爹梁。右犹。。姚垃。念链。。积糯。钓账。。絮宁。梆暮。
安裝過程包括:
1,安裝docker
2, ? 加載鏡像至本地
3绍昂,安裝k8s ?基礎(chǔ)工具啦粹,如 kubeadm ,kubectl, 等工具
4窘游,k8s 初始化配置參數(shù)唠椭,設(shè)置pod 內(nèi)部網(wǎng)絡(luò) IP
5 ,發(fā)布flannel 服務(wù) ,啟動(dòng)鏡像 ? ?//k8s pod內(nèi)部網(wǎng)絡(luò)通信使用該服務(wù)忍饰,其實(shí)是一個(gè)軟件贪嫂,我們是 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//以docker容器的方式在跑
安裝完成后會(huì)生成一個(gè)token ,一定要保存至其他位置,這個(gè)千萬要操作艾蓝,后面無論是添加master 還是node ,都需要這個(gè)token..
正常安裝完成的結(jié)果如下圖:
這就是安裝單master的完美結(jié)果力崇,驗(yàn)證如下:
kubectl get nodes ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//cento7 是我自己的虛擬機(jī)主機(jī)名
docker ps ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 下圖為docker ps
或者? kubectl get po --all-namespaces
備注: 如果在安裝過程中出現(xiàn)錯(cuò)誤斗塘,則中斷安裝,執(zhí)行 ??
? ? ? ? ? ? kubeadm reset ? ? //該命令會(huì)刪除已經(jīng)寫好的配置文件
? ? ? ? ? ? 然后重新執(zhí)行 上面那個(gè)很長(zhǎng)的命令亮靴。
詳解:
kube-apiserver :集群入口進(jìn)程馍盟,是k8s 所有資源的增刪改查操作唯一入口,提供HTTP Rest 關(guān)鍵服務(wù)進(jìn)程
kube-controller-manager: k8s里面所有資源的自動(dòng)化控制中心茧吊,可以理解為資源對(duì)象的大總管
kube-scheduler :負(fù)責(zé)資源調(diào)度的進(jìn)程贞岭,相當(dāng)于公交公司的調(diào)度室
flannel ?網(wǎng)絡(luò): ?pod之間相互通信,必須依靠此網(wǎng)絡(luò)
kube-proxy : ? service是一組pod的服務(wù)抽象搓侄,相當(dāng)于一組pod的LB瞄桨,負(fù)責(zé)將請(qǐng)求分發(fā)給 ? ? ? ? ? ? ? ? ? ? ? ? ?對(duì)應(yīng)的pod。service會(huì)為這個(gè)LB提供一個(gè)IP讶踪,一般稱為cluster IP芯侥。kube- ? ? ? ? ? ? ? ? ? ? ? ? ?proxy的作用主要是負(fù)責(zé)service的實(shí)現(xiàn),具體來說俊柔,就是實(shí)現(xiàn)了內(nèi)部從pod ? ? ? ? ? ? ? ? ? ? ? ?到service和外部的從node port向service的訪問
kube-proxy的作用主要是負(fù)責(zé)service的實(shí)現(xiàn)筹麸,具體來說活合,就是實(shí)現(xiàn)了內(nèi)部從pod到service和外部的從node port向service的訪問雏婶。
至此, kubernetes 單master 安裝完成白指,過程比較粗糙留晚,還請(qǐng)見諒!告嘲。
備注: 把 /etc/yum.repos.d/ 移走的東西再移動(dòng)回來错维,不要影響系統(tǒng)后續(xù)的 ?yum 操作