K8S搭建教程及部署腳本


部署環境:


 

 

1:系統配置(ALL HOST)

  1.1:SELINUX配置

    首先獲取selinux的狀態

[root@localhost ~]# sestatus

 

     可以看到當前的狀態是啟用的,此狀態更改有兩種方式:

  1:臨時關閉

[root@localhost ~]# setenforce 0  #臨時關閉

  2:永久關閉(修改配置文件)

    selinux配置文件涉及到兩個,如下

/etc/selinux/config 
/etc/sysconfig/selinux 

    用vi命令分別修改這兩個配置文件的SELINUX參數為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 

    配置文件修改之后需要重啟系統才能生效,但是可以先使用相關指令臨時關閉,無需浪費時間,至此,SELINUX配置完成

1.2:防火牆配置

[root@localhost ~]# systemctl disable firewalld #禁止防火牆開機自啟
[root@localhost ~]# systemctl stop firewalld #關閉防火牆

    關閉之后,查看服務狀態

[root@localhost ~]# systemctl status firewalld #查看防火牆當前運行狀態

 

     可以看到當前狀態為dead #不活躍的,所以防火牆配置完成

 

1.3:關閉swap 

sudo swapoff -a

 

     可以看到,當前的分區掛載是存在有swap的,關閉的方法很簡單,在swap這一行前面加入一個  {#}    即可,或者執行下面的指令

sudo sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab #永久 

 

 

     至此,swap配置完成

1.4:配置K8S虛擬網絡路由轉發

sudo echo -e "net.bridge-nf-call-ip6tables = 1\nnet.bridge-nf-call-iptables = 1\nnet.ipv4.ip_forward = 1" > /etc/sysctl.conf

    上面的命令就是將下面三個參數寫入sysctl.conf配置文件,修改之后執行生效指令

sysctl -p

    結果如下,其中的報錯信息暫時不管,至此,轉發配置完成

 

 

 

2:配置阿里源,docker源,kubelet源(ALL HOST)

        (眾所周知,國內使用一些國外系統的時候總會遇到一些網絡問題,故此我們在安裝任何服務前先配置一下軟件倉庫服務器)

1:備份源

rm -rf /yum_bak&&mkdir -p /yum_bak
mv /etc/yum.repos.d/* /yum_bak/&&ls

2:添加阿里源,docker源,kubelet源

sudo curl -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.repo
https://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
#臨時關閉selinux

sudo yum clean all #清除緩存

sudo yum makecache -y  #創建索引

sudo yum repolist  #包統計

    結果如下:

 

     可以看到,源配置已經成功

3:服務安裝(all host)

3.1:安裝docker

首先查看當前倉庫已啟用的docker-ce倉庫有哪些

yum repolist all | grep docker

 

可以看到,當前啟用的倉庫為穩定版,其他類型均為禁用狀態,下一步查看當前可安裝的docker版本

yum list docker-ce --showduplicates|sort -r

 

 當前源可獲取的最新版本為第一個,也就是

 

 

 所以,現在如果執行服務安裝命令,則會安裝此版本,現在我們先安裝指定版本(低版本)

sudo yum install -y docker-ce-18.06.3.ce-3.el7

然后啟動看看

sudo systemctl start docker

 

 查看docke信息

docker info

 

 現在我又想安裝最新版了,那么也簡單,執行安裝/更新指令即可

sudo yum update -y docker-ce

 

 然后再次查看docker信息

sudo systemctl restart docker
sudo docker info

 

 docker安裝到此結束

 

3.2:安裝kubelet(k8s)

首先查看可安裝版本

yum list kubelet --showduplicates|sort -r

 

 這次就直接安裝最新版吧

sudo yum install -y kubelet

 

 然后繼續按照其他組件(可一起安裝)

sudo yum install -y  kubeadm kubectl

至此,服務安裝部分結束

4:服務配置

4.1:docker 配置(all host)

docker一般情況下只需要配置一點即可(鏡像地址),命令如下:

sudo mkdir -p /etc/docker
echo -e "{\n   \"registry-mirrors\": [\"https://r61ch9pn.mirror.aliyuncs.com\"]\n}" > /etc/docker/daemon.json
cat /etc/docker/daemon.json

 

 

 配置之后重啟docker服務,查看docker信息,查看鏡像地址是否成功改變

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo docker info

 

 

 查看鏡像地址(docker info反饋的下面)

 

 

 至此,docker配置完成

 

4.2:K8S配置(ALL Host)

所有節點部分:

      首先為了區分開來,先對主機進行命名及主機解析

4.2.1:主機名配置:

 

hostnamectl set-hostname master  #其他主機分別把master換成自己的主機名即可
su
hostname

 

 

 

 4.2.2:主機解析(所有節點一致)

先查看當前配置

cat /etc/hosts

 

 

 當前配置則是默認設置,所以現在需要追加主機映射配置

vi /etc/hosts

追加以下參數

10.5.1.10 master
10.5.1.11 node1
10.5.1.12 node2 etcd

效果如下:

 

 

 然后將此文件分派給其他節點:

scp /etc/hosts node1:/etc/
scp /etc/hosts node2:/etc/

 

 

 

 

 

 至此,主機解析配置完成!

4.3:初始化k8s(Master)

獲取k8s版本

ver=`kubeadm version|awk '{print $5}'|sed "s/[^0-9|\.]//g"|awk 'NR==1{print}'`

獲取MASTER主機IP

ip=`cat /etc/hosts|grep master|awk '{print $1}'|awk 'NR==1{print}'`

驗證信息

echo -e "k8s version is v${ver}\nmaster ip is ${ip}"

 

 

 出現以上信息之后就可以執行初始化操作了:初始化master節點

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

然后遇到問題

 

 

 首先解決第一個:防火牆配置

sudo systemctl stop firewalld&&sudo systemctl disable firewalld

 

 

 然后到第二個:設置docker服務開機自啟

sudo systemctl enable docker

 

 

第三個暫不解決,這個問題不影響主要功能

第四個:設置k8s開機自啟

sudo systemctl enable docker kubelet

 

 

 第五個:關閉swap

sudo swapoff -a #臨時關閉
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab #永久

現在繼續初始化:

 

 

 此時可以看到顯示鏡像正在拉取中........

然后初始化成功,提示有三個關鍵信息,前面兩個直接在master執行

 

 

 按照提示執行相關指令:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

然后執行下一個指令

kubectl apply -f https://xypj-1252147235.cos.ap-guangzhou.myqcloud.com/kube-flannel.yaml

  

 

 

 

第三條執行分別在node節點執行,此指令涉及的uid屬於隨機性,如過期請在master節點執行下面的命令重新生成

kubeadm token create --print-join-command

至此,master節點初始化完成!

 

5:Node節點加入並驗證

 首先,在master節點執行注冊命令創建,然后復制到node節點進行注冊

 

 

 

 然后把這段復制下來(隨機的,不要復制我的)

kubeadm join 10.1.1.2:6443 --token 32sevm.0l5rmz0q8v8kgfzv     --discovery-token-ca-cert-hash sha256:25cd4612de2097d41e0bf49bd8f97ba45971d61b50fb4a768f28d49741d52e5b

然后到node節點執行

 

 

 可以看到此時有一個錯誤,一個意外,但是不要慌,穩住!首先解決第一個意外

 

 

 可以看到,此時的驅動程序是cgroup,並不是system,那么就改一下!

echo -e "{\n\t\"exec-opts\": [\"native.cgroupdriver=systemd\"],\n\t\"registry-mirrors\": [\"http://hub-mirror.c.163.com\"]\n}" > /etc/docker/daemon.json

然后驗證一下

 此時,文件已經修改完成,然后繼續解決下一個錯誤

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

 全部解決完成之后,只需要重新啟動docker即可

 已經解決兩個問題了,然后重新注冊試試

 

 此時顯示已經加入成功,然后去master節點查看

 

 可以看到,node節點已經加入了,但是狀態屬於未准備,並且rule(角色)為空!不要慌,穩住,下面先解決最簡單的角色

kubectl label nodes node node-role.kubernetes.io/node=

//nodes接着的“node”屬於節點主機名;

//最后一個node屬於角色屬性(另外還可以設置的角色為master)

驗證一下!

 

 此時,角色已經改好了,現在看一下node節點到底咋了。

在node節點查看容器運行情況

 

 可以看到,有一個容器是退出狀態的,這時候可以判斷很大程度上是這個容器導致的,那就看看這個容器到底咋了

 

 emmmm,居然看不到日志,然后我發現已經可以了

 莫名其妙,但是可以看的出的是,之前是使用tag進行運行容器的,現在是用鏡像ID,既然可以了那就先不管了

 

好啦!到此結束


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM