准備階段
master1 master2 master3 node1
關閉selinux,firewall
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
關閉swap,(1.8版本后的要求,目的應該是不想讓swap干擾pod可使用的內存limit)
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
修改下面內核參數,否則請求數據經過iptables的路由可能有問題
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
安裝kubeadm、docker
將Kubernetes安裝源改為阿里雲,方便國內網絡環境安裝
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=0
EOF
安裝docker-ce
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
安裝kubelet kubeadm kubectl
yum install kubeadm-1.15.0-0.x86_64 kubectl-1.15.0-0.x86_64 kubelet-1.15.0-0.x86_64 -y
kubectl命令自動補全
yum install bash-completion* -y
##寫入環境變量
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
安裝keepalived,配置虛擬IP為192.168.81.100
啟動kubelet,docker並設置開機啟動
部署Kubernetes
在master-1節點操作:
准備集群配置文件,目前用的api版本為v1beta1,具體配置可以參考官方reference
cat << EOF > /root/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.15.0 # 指定1.15版本
controlPlaneEndpoint: 192.168.81.10:6443 # haproxy地址及端口
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers # 指定鏡像源為阿里源
networking:
podSubnet: 10.244.0.0/16 # 計划使用flannel網絡插件,指定pod網段及掩碼
EOF
執行節點初始化
systemctl enable kubelet
systemctl start kubelet
kubeadm config images pull --config kubeadm-config.yaml # 通過阿里源預先拉鏡像
kubeadm init --config=kubeadm-config.yaml --upload-certs --ignore-preflight-errors=all
kubeadm init --kubernetes-version=v1.15.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=all --upload-certs
安裝成功,可以看到輸出
You can now join any number of the control-plane node running the following command on each as root:
# master節點用以下命令加入集群:
kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6 \
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 \
--experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826 --ignore-preflight-errors=all
# 工作節點用以下命令加入集群:
kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6 \
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 --ignore-preflight-errors=all
原來的kubeadm版本,join命令只用於工作節點的加入,而新版本加入了 --control-plane 參數后,控制平面(master)節點也可以通過kubeadm join命令加入集群了。
添加kubectl控制權限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
加入另外一個master節點
在master-2操作:
kubeadm join 192.168.81.100:6443 --token ocb5tz.pv252zn76rl4l3f6 \
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2 \
--experimental-control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826
--ignore-preflight-errors=all
添加kubectl控制權限
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
notready狀態
編輯 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf文件(有的是/usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf文件),
刪除最后一行里的$KUBELET_NETWORK_ARGS
systemctl restart kubelet
安裝網絡插件
kubectl apply –f kube-flannel.yml
再次查看節點狀態
kubectl get nodes
參考:
kube-flannel網絡插件:https://www.wanghaiqing.com/article/aa3ac027-7ae8-43ff-821e-49f6dfcd17e8/
kubeadm高可用:https://segmentfault.com/a/1190000018741112?utm_source=tag-newest
notready參照:https://www.cnblogs.com/zhongyuanzhao000/p/11401031.html