很久沒有寫文章了,之前搞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-data
和lvm2
需要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
感謝上面的博主的文章。
作者具有所有權,未經作者同意禁止轉載。