kubeadm部署高可用master
Posted leiwenbin627
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kubeadm部署高可用master相关的知识,希望对你有一定的参考价值。
准备阶段
master1 master2 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=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
安装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
部署Kubernetes
在master-1节点操作:
准备集群配置文件,目前用的api版本为v1beta1,具体配置可以参考官方reference
cat << EOF > /root/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration
kubernetesVersion: v1.15.0 # 指定1.14版本
controlPlaneEndpoint: 192.168.41.232: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.41.232:6443 --token ocb5tz.pv252zn76rl4l3f6
--discovery-token-ca-cert-hash sha256:141bbeb79bf58d81d551f33ace207c7b19bee1cfd7790112ce26a6a300eee5a2
--control-plane --certificate-key 20366c9cdbfdc1435a6f6d616d988d027f2785e34e2df9383f784cf61bab9826 --ignore-preflight-errors=all
# 工作节点用以下命令加入集群:
kubeadm join 192.168.41.232: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.41.232: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
以上是关于kubeadm部署高可用master的主要内容,如果未能解决你的问题,请参考以下文章
kubeadm部署k8s1.9高可用集群--4部署master节点