0. 關於kubernetes版本變更和停用的說明
大概是2020年3月12日左右 k8s官方停止對老版本k8s的支持 按照以前的安裝方法安裝的k8s 一方面是必要的鏡像下載不下來 另外一方面是kube-flannel.yml文件版本過老無法成功創建flannel網絡。經過反覆安裝和測試 k8sv1.17.3+flannelv0.12纔可以順利完成安裝 當然 採用更新的k8s版本也可以 本文安裝的是1.17.4的版本 下邊使用的flannel也是最新的 可以放心使用
寫文章時的時間是 2020年3月15日14:03:29
1. 關於主機要求的簡單說明
系統:centos7 即可 我用的是centos7.4
內存:如果是字符界面的系統 2G就可以 如果圖形化界面 建議3G
CPU:我的是2顆 每個單核 這個沒太大所謂
網絡:可以根據自己喜好 選擇NAT 橋接 或者僅主機 主從節點能要能夠聯通 在同一網段
別的好像也沒有什麼需要說的了
2. 環境準備
1)設置主機名並修改hosts文件
[root@localhost ~]# hostnamectl set-hostname k8s-master01
[root@localhost ~]# hostnamectl set-hostname k8s-node01
[root@localhost ~]# hostnamectl set-hostname k8s-node02
192.168.20..130 k8s-master01
192.168.20.131 k8s-node01
192.168.20.132 k8s-node02
2) 關閉防火牆 selinux swap分區
[root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld
[root@localhost ~]# swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
[root@localhost ~]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
3)必要模塊的加載
查看:lsmod | grep br_netfilter
如果沒有看到 則加載:
[root@localhost ~]# modprobe br_netfilter
4)修改內核參數 開啓網橋模式
[root@localhost ~]# cat <<EOF > /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@localhost ~]# sysctl -p /etc/sysctl.d/kubernetes.conf
5)調整系統時區
設置系統時區爲 中國/上海
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
進行網絡對時
[root@localhost ~]# ntpdate ntp.ntsc.ac.cn
3. 安裝docker
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@localhost ~]# yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum -y install docker-ce
# 重啓docker服務
[root@localhost ~]# systemctl daemon-reload && systemctl restart docker && systemctl enable docker
4. 安裝kubeadm等必備服務
[root@localhost ~]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
[root@localhost ~]# yum -y install kubeadm-1.17.4 kubectl-1.17.4 kubelet-1.17.4
[root@localhost ~]# systemctl enable kubelet.service
5. 初始化主節點、安裝flannel網絡
從k8s官方下載鏡像特別慢 建議從阿里雲下載 完全可用
主節點初始化
[root@localhost ~]# kubeadm init --kubernetes-version=v1.17.4 --apiserver-advertise-address=192.168.20.130 --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers
安裝flannel網絡
[root@localhost ~]# wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
[root@localhost ~]# kubectl apply -f kube-flannel.yml
關於從節點下載鏡像:
在主節點上執行kubeadm config images list 可以查看用到的鏡像
從節點pull這些鏡像下來即可
flannel網絡部署完成後 使用ifconfig看master 會發現一個叫flannel.1的網橋 如下
兩個node節點執行加入集羣的指令(在初始化時候屏幕上輸出的日誌裏) 加入集羣
[root@localhost ~]# kubeadm join 192.168.20.130:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:a5e9dfa94b5fd8cdb4132df91d584a323bdbd46dbae558a15d6ce9a2711ae300
master端查看節點狀態
[root@k8s-master01 flannel]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready master 19m v1.17.4
k8s-node01 Ready <none> 25s v1.17.4
k8s-node02 Ready <none> 2m16s v1.17.4
6. 問題及解決
1. 創建flannel時報錯如下的時候 重新初始化
[root@k8s-master01 ~]# kubectl apply -f kube-flannel.yml
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")
重新初始化的操作
[root@k8s-master01 ~]# kubeadm reset
之後就是初始化的操作了
2. 從節點加入集羣時報錯
如下 如果加入時報錯
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-kubelet.conf]: /etc/kubernetes/kubelet.conf already exists
[ERROR Port-10250]: Port 10250 is in use
[ERROR FileAvailable--etc-kubernetes-pki-ca.crt]: /etc/kubernetes/pki/ca.crt already exists
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
此時 從節點kubeadm reset一下再試就好了