K8S搭建教程及部署脚本
部署環(huán)境:
1:系統(tǒng)配置(ALL HOST)
1.1:SELINUX配置
首先獲取selinux的狀態(tài)
[root@localhost ~]# sestatus
可以看到當(dāng)前的狀態(tài)是啟用的,此狀態(tài)更改有兩種方式:
1:臨時(shí)關(guān)閉
[root@localhost ~]# setenforce 0 #臨時(shí)關(guān)閉
2:永久關(guān)閉(修改配置文件)
selinux配置文件涉及到兩個(gè),如下
/etc/selinux/config /etc/sysconfig/selinux
用vi命令分別修改這兩個(gè)配置文件的SELINUX參數(shù)為disabled
SELINUX=disabled
也可以使用sed命令替換
sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config sudo sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/sysconfig/selinux
修改完成如下
[root@localhost ~]# vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX=disabled # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled # SELINUXTYPE= can take one of three values: # targeted - Targeted processes are protected, # minimum - Modification of targeted policy. Only selected processes are protected. # mls - Multi Level Security protection. SELINUXTYPE=targeted
配置文件修改之后需要重啟系統(tǒng)才能生效,但是可以先使用相關(guān)指令臨時(shí)關(guān)閉,無(wú)需浪費(fèi)時(shí)間,至此,SELINUX配置完成
1.2:防火墻配置
[root@localhost ~]# systemctl disable firewalld #禁止防火墻開(kāi)機(jī)自啟
[root@localhost ~]# systemctl stop firewalld #關(guān)閉防火墻
關(guān)閉之后,查看服務(wù)狀態(tài)
[root@localhost ~]# systemctl status firewalld #查看防火墻當(dāng)前運(yùn)行狀態(tài)
可以看到當(dāng)前狀態(tài)為dead #不活躍的,所以防火墻配置完成
1.3:關(guān)閉swap
sudo swapoff -a
可以看到,當(dāng)前的分區(qū)掛載是存在有swap的,關(guān)閉的方法很簡(jiǎn)單,在swap這一行前面加入一個(gè) {#} 即可,或者執(zhí)行下面的指令
sudo sed -i '/swap/s/^(.*)$/#1/g' /etc/fstab #永久
至此,swap配置完成
1.4:配置K8S虛擬網(wǎng)絡(luò)路由轉(zhuǎn)發(fā)
sudo echo -e "net.bridge-nf-call-ip6tables = 1 net.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1" > /etc/sysctl.conf
上面的命令就是將下面三個(gè)參數(shù)寫(xiě)入sysctl.conf配置文件,修改之后執(zhí)行生效指令
sysctl -p
結(jié)果如下,其中的報(bào)錯(cuò)信息暫時(shí)不管,至此,轉(zhuǎn)發(fā)配置完成
2:配置阿里源,docker源,kubelet源(ALL HOST)
(眾所周知,國(guó)內(nèi)使用一些國(guó)外系統(tǒng)的時(shí)候總會(huì)遇到一些網(wǎng)絡(luò)問(wèn)題,故此我們?cè)诎惭b任何服務(wù)前先配置一下軟件倉(cāng)庫(kù)服務(wù)器)
1:備份源
rm -rf /yum_bak&&mkdir -p /yum_bak mv /etc/yum.repos.d/* /yum_bak/&&ls
2:添加阿里源,docker源,kubelet源
sudocurl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo #添加阿里源
sudo curl -o /etc/yum.repos.d/Docker-ce.repohttps://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#添加docker-ce源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
##源配置完成
setenforce 0 #臨時(shí)關(guān)閉selinux
sudo yum clean all #清除緩存
sudo yum makecache -y #創(chuàng)建索引
sudo yum repolist #包統(tǒng)計(jì)
結(jié)果如下:
可以看到,源配置已經(jīng)成功
3:服務(wù)安裝(all host)
3.1:安裝docker
首先查看當(dāng)前倉(cāng)庫(kù)已啟用的docker-ce倉(cāng)庫(kù)有哪些
yum repolist all | grep docker
可以看到,當(dāng)前啟用的倉(cāng)庫(kù)為穩(wěn)定版,其他類(lèi)型均為禁用狀態(tài),下一步查看當(dāng)前可安裝的docker版本
yum list docker-ce --showduplicates|sort -r
當(dāng)前源可獲取的最新版本為第一個(gè),也就是
所以,現(xiàn)在如果執(zhí)行服務(wù)安裝命令,則會(huì)安裝此版本,現(xiàn)在我們先安裝指定版本(低版本)
sudo yum install -y docker-ce-18.06.3.ce-3.el7
然后啟動(dòng)看看
sudo systemctl start docker
查看docke信息
docker info
現(xiàn)在我又想安裝最新版了,那么也簡(jiǎn)單,執(zhí)行安裝/更新指令即可
sudo yum update -y docker-ce
然后再次查看docker信息
sudo systemctl restart docker sudo docker info
docker安裝到此結(jié)束
3.2:安裝kubelet(k8s)
首先查看可安裝版本
yum list kubelet --showduplicates|sort -r
這次就直接安裝最新版吧
sudo yum install -y kubelet
然后繼續(xù)按照其他組件(可一起安裝)
sudo yum install -y kubeadm kubectl
至此,服務(wù)安裝部分結(jié)束
4:服務(wù)配置
4.1:docker 配置(all host)
docker一般情況下只需要配置一點(diǎn)即可(鏡像地址),命令如下:
sudo mkdir -p /etc/docker
echo -e "{ "registry-mirrors": ["https://r61ch9pn.mirror.aliyuncs.com"] }" > /etc/docker/daemon.json
cat /etc/docker/daemon.json
配置之后重啟docker服務(wù),查看docker信息,查看鏡像地址是否成功改變
sudo systemctl daemon-reload sudo systemctl restart docker sudo docker info
查看鏡像地址(docker info反饋的下面)
至此,docker配置完成
4.2:K8S配置(ALL Host)
所有節(jié)點(diǎn)部分:
首先為了區(qū)分開(kāi)來(lái),先對(duì)主機(jī)進(jìn)行命名及主機(jī)解析
4.2.1:主機(jī)名配置:
hostnamectl set-hostname master #其他主機(jī)分別把master換成自己的主機(jī)名即可
su
hostname
4.2.2:主機(jī)解析(所有節(jié)點(diǎn)一致)
先查看當(dāng)前配置
cat /etc/hosts
當(dāng)前配置則是默認(rèn)設(shè)置,所以現(xiàn)在需要追加主機(jī)映射配置
vi /etc/hosts
追加以下參數(shù)
10.5.1.10 master 10.5.1.11 node1 10.5.1.12 node2 etcd
效果如下:
然后將此文件分派給其他節(jié)點(diǎn):
scp /etc/hosts node1:/etc/
scp /etc/hosts node2:/etc/
至此,主機(jī)解析配置完成!
4.3:初始化k8s(Master)
獲取k8s版本
ver=`kubeadm version|awk '{print $5}'|sed "s/[^0-9|.]//g"|awk 'NR==1{print}'`
獲取MASTER主機(jī)IP
ip=`cat /etc/hosts|grep master|awk '{print $1}'|awk 'NR==1{print}'`
驗(yàn)證信息
echo -e "k8s version is v${ver}
master ip is ${ip}"
出現(xiàn)以上信息之后就可以執(zhí)行初始化操作了:初始化master節(jié)點(diǎn)
kubeadm init --apiserver-advertise-address=${ip}
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v${ver}
--service-cidr=10.1.0.0/16
--pod-network-cidr=10.244.0.0/16
然后遇到問(wèn)題
首先解決第一個(gè):防火墻配置
sudo systemctl stop firewalld&&sudo systemctl disable firewalld
然后到第二個(gè):設(shè)置docker服務(wù)開(kāi)機(jī)自啟
sudo systemctl enable docker
第三個(gè)暫不解決,這個(gè)問(wèn)題不影響主要功能
第四個(gè):設(shè)置k8s開(kāi)機(jī)自啟
sudo systemctl enable docker kubelet
第五個(gè):關(guān)閉swap
sudo swapoff -a #臨時(shí)關(guān)閉
sudo sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab #永久
現(xiàn)在繼續(xù)初始化:
此時(shí)可以看到顯示鏡像正在拉取中........
然后初始化成功,提示有三個(gè)關(guān)鍵信息,前面兩個(gè)直接在master執(zhí)行
按照提示執(zhí)行相關(guān)指令:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
然后執(zhí)行下一個(gè)指令
kubectl apply -f https://xypj-1252147235.cos.ap-guangzhou.myqcloud.com/kube-flannel.yaml
第三條執(zhí)行分別在node節(jié)點(diǎn)執(zhí)行,此指令涉及的uid屬于隨機(jī)性,如過(guò)期請(qǐng)?jiān)趍aster節(jié)點(diǎn)執(zhí)行下面的命令重新生成
kubeadm token create --print-join-command
至此,master節(jié)點(diǎn)初始化完成!
5:Node節(jié)點(diǎn)加入并驗(yàn)證
首先,在master節(jié)點(diǎn)執(zhí)行注冊(cè)命令創(chuàng)建,然后復(fù)制到node節(jié)點(diǎn)進(jìn)行注冊(cè)
然后把這段復(fù)制下來(lái)(隨機(jī)的,不要復(fù)制我的)
kubeadm join 10.1.1.2:6443 --token 32sevm.0l5rmz0q8v8kgfzv --discovery-token-ca-cert-hash sha256:25cd4612de2097d41e0bf49bd8f97ba45971d61b50fb4a768f28d49741d52e5b
然后到node節(jié)點(diǎn)執(zhí)行
可以看到此時(shí)有一個(gè)錯(cuò)誤,一個(gè)意外,但是不要慌,穩(wěn)住!首先解決第一個(gè)意外
可以看到,此時(shí)的驅(qū)動(dòng)程序是cgroup,并不是system,那么就改一下!
echo -e "{
"exec-opts": ["native.cgroupdriver=systemd"],
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}" > /etc/docker/daemon.json
然后驗(yàn)證一下
此時(shí),文件已經(jīng)修改完成,然后繼續(xù)解決下一個(gè)錯(cuò)誤
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
全部解決完成之后,只需要重新啟動(dòng)docker即可
已經(jīng)解決兩個(gè)問(wèn)題了,然后重新注冊(cè)試試
此時(shí)顯示已經(jīng)加入成功,然后去master節(jié)點(diǎn)查看
可以看到,node節(jié)點(diǎn)已經(jīng)加入了,但是狀態(tài)屬于未準(zhǔn)備,并且rule(角色)為空!不要慌,穩(wěn)住,下面先解決最簡(jiǎn)單的角色
kubectl label nodes node node-role.kubernetes.io/node=
//nodes接著的“node”屬于節(jié)點(diǎn)主機(jī)名;
//最后一個(gè)node屬于角色屬性(另外還可以設(shè)置的角色為master)
驗(yàn)證一下!
此時(shí),角色已經(jīng)改好了,現(xiàn)在看一下node節(jié)點(diǎn)到底咋了。
在node節(jié)點(diǎn)查看容器運(yùn)行情況
可以看到,有一個(gè)容器是退出狀態(tài)的,這時(shí)候可以判斷很大程度上是這個(gè)容器導(dǎo)致的,那就看看這個(gè)容器到底咋了
emmmm,居然看不到日志,然后我發(fā)現(xiàn)已經(jīng)可以了
莫名其妙,但是可以看的出的是,之前是使用tag進(jìn)行運(yùn)行容器的,現(xiàn)在是用鏡像ID,既然可以了那就先不管了
好啦!到此結(jié)束
總結(jié)
以上是生活随笔為你收集整理的K8S搭建教程及部署脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 消息称索尼 ZV 系列全画幅相机 3 月
- 下一篇: 天线是个什么鬼?