K8s主從節點的搭建


    很久沒有寫文章了,之前搞k8s一直想寫的,就一直拖,所以今天來更新一下K8s主從節點的搭建。記憶力真的不太好了。

當然安裝k8s的方式有很多,我選擇的是 Kubeadm ,之前用過其他方式安裝過老版本的k8s,感覺不方便就不寫出來了。

硬件准備: 

  • 兩台大於2g內存的服務器或虛擬機。

首先我們准備兩台虛擬機,內存需要大於2g,不然會安裝失敗的。

准備好后就可以開始我們的安裝工作了。

第一步:

我們需要關閉防火牆,SeLinux,以及swap:

  • 關閉防火牆是為了暴露K8s需要用到的端口
  • SELinux 主要作用就是最大限度地減小系統中服務進程可訪問的資源(最小權限原則)。所以避免k8s進程受到管制導致未知的問題所以關閉它。
  • swap,指的是一個交換分區或文件。關閉swap主要是為了性能考慮。

關閉防火牆:

systemctl stop firewalld  停止防火牆
systemctl disable firewalld 開機不啟動防火牆
systemctl status firewalld 查看防火牆狀態是否關閉

關閉SELinux:

setenforce 0 臨時禁用

永久禁用:
vi /etc/selinux/config    
SELINUX=disabled

關閉swap:

swapoff -a  臨時關閉

第二步:

修改k8s.conf文件:

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

第三步:

安裝docker:

1、假如之前有安裝過docker可以先卸載掉之前的docker以及依賴:

sudo 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、安裝必須的包。yum-utils提供了yum-config-manager實用程序,並且device-mapper-persistent-datalvm2需要devicemapper存儲驅動程序:

sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

3、使用以下命令設置穩定存儲庫。 您始終需要穩定的存儲庫,即使您也想從邊緣或測試存儲庫安裝構建:

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

4、查看docker版本列表確定你需要安裝的是什么版本:

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

5、選擇你需要的docker版本,一般選擇穩定的版本:

sudo yum install docker-ce-18.06.3.ce

6:、安裝成功后,開啟docker:

systemctl start docker  開啟docker
systemctl status docker 查看docker版本

然后docker安裝就成功了。

第四步:

可以開始k8s的安裝了。這里可以先修改一下主機名 :

hostnamectl set-hostname k8s-master   名字可以隨意定,表示大致意思就可以了。

首先修改安裝源(下載會快很多)

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

然后開始安裝:

yum install -y kubelet-1.16.3-0 kubeadm-1.16.3-0 kubectl-1.16.3-0
systemctl enable kubelet
systemctl start kubelet 這里注意kubelet是起不來的,在master節點初始化之前是無法啟動的

接着初始化master節點(注意這里以后的步驟子節點不需安裝):

kubeadm init --kubernetes-version=1.16.3 \
--apiserver-advertise-address=192.168.31.150 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16

解釋: –kubernetes
-version: 用於指定k8s版本; –apiserver-advertise-address:用於指定kube-apiserver監聽的ip地址,就是 master本機IP地址。 –pod-network-cidr:用於指定Pod的網絡范圍; 10.244.0.0/16 –service-cidr:用於指定SVC的網絡范圍; –image-repository: 指定阿里雲鏡像倉庫地址

這里指定阿里雲鏡像倉庫是因為國外的無法訪問。這里還需要注意的是等待的時間比較久,大約在4、5分鍾左右。之后看到:

Your Kubernetes control-plane has initialized successfully!

這樣就成功了,繼續下一步:

配置kubectl工具,以供我們使用(后面子節點也需要用到):

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

安裝calico(Calico是一個純三層的協議,為OpenStack虛機和Docker容器提供多主機間通信):

mkdir k8s
cd k8s
wget https://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

## 將192.168.0.0/16修改ip地址為10.244.0.0/16
sed -i 's/192.168.0.0/10.244.0.0/g' calico.yaml

kubectl apply -f calico.yaml

這里如果wget下載不下來就用http代替https:

http://docs.projectcalico.org/v3.10/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml

最后在設置kubelet開機啟動就可以了,我們主節點就算安裝成功了:

systemctl enable kubelet

第五步:

子節點初始化,可以先改個主機名:

hostnamectl set-hostname k8s-node1   名字可以隨意定,表示大致意思就可以了。

然后和上面一樣,需要關閉防火牆等,安裝docker,安裝k8s,直到初始化master上面的步驟,這個時候我們就可以把根節點加入到主節點中了。

重點:首先我們要把master機器上的token獲取下來:

kubeadm token list

然后找到證書:

openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt |openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex |sed 's/^.* //'

  然后就可以加入master了:

kubeadm join 192.168.202.131:6443 --token f9vc9q.czjexxx \
    --discovery-token-ca-cert-hash sha256:9b48669c620fcxxxx2a0cfa842f8c3950690f43a5d552a7cefef37d1fa31

剛剛獲取的token放在--token之后,注意空格。獲取的證書放sha256:之后就可以了。

假如還是無法加入,那可能是token過期了,重新生成一個token就行了:

kubeadm token create

加入成功之后,我們設置開機啟動:

systemctl enable kubelet

然后在主節點機器上獲取nodes發現我們的子節點是not ready的情況,這個問題卡了有點久,我們查看一下主節點的pod情況:

kubectl get pods -n kube-system

發現calico-node其中一個pod沒有跑起來:

 然后查看這個pod的描述:

kubectl describe po calico-node-m6442

發現事件中有報錯,節點沒有拉取下來這個鏡像:

 然后我們在節點機器拉取下來就可以咯:

docker pull calico/node:v3.10.3

等幾分鍾就發現node狀態是ready了。這個時候我們可以在子節點機器查看一下節點:

kubectl get nodes

此時又發現錯誤:The connection to the server localhost:8080 was refused - did you specify the right host or port?

需要在節點機器/root下新建一個目錄 .kube:

mkdir /root/.kube
cd /root/.kube

然后新建一個文件config,將master節點中/root/.kube/config 文件下的內容復制到節點中config文件中。內容如下:

 然后重新執行一下:

這里發現節點node1的角色是none,這個時候需要設置一下節點node1的角色: 

kubectl label node k8s-node1 node-role.kubernetes.io/node=node

然后節點的角色變成node了,那么主從節點的安裝就大公告成了。

 借鑒博客:http://www.cnblogs.com/stulzq/p/7743073.html  , https://www.cnblogs.com/xiao987334176/p/11899321.html

感謝上面的博主的文章。

作者具有所有權,未經作者同意禁止轉載。


免責聲明!

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



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