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

猜你喜欢

转载自www.cnblogs.com/leiwenbin627/p/11595921.html