目录
一, 部署方案选择
二, 默认拓扑部署
1, 使用 ansiable 分发配置, 如: 设置主机名,/etc/hosts 解析, repo 文件, dockerhub 证书, 服务器配置, 安装 docker 等, 不详述了就.(每台服务器)
2, 安装 docker(每台服务器)
3, 安装 kubeadm, kubelet 和 kubectl(每台服务器)
4, 配置高可用
5, 初始化第一个 master0
6, 验证证书有效时间
7, 安装网络插件
8, 拷贝 master 证书到其他 master 节点
9, 加入集群
一, 部署方案选择
使用 kubeadm 安装多 master 集群有两种部署方案:
第一种使用 kubeadm 中的默认拓扑. 使用 kubeadm join --experimental-control-plane 命令在 master 节点上自动创建本地 etcd 成员, 加入到 master 集群. 这种部署方式最为简单, 缺点是有一定的耦合失败的风险. 每个 master 节点运行 kube-apiserver,kube-scheduler 和 kube-controller-manager 的一个实例, 每个 master 节点创建一个本地 etcd 成员, 该 etcd 成员仅与本节点 kube-apiserver 通信, kube-controller-manager 和 kube-scheduler 也一样. 所以每掉一台服务器就会使 etcd 和 apiserver 的实例减少一台, 必要时候需要按照集群的规模, 扩大 master 实例的数量, 减少风险.
第二种是使用外部 etcd 集群拓扑, etcd 节点与 master 在不同节点上运行. 需要额外为每个 master 创建独立的 init 配置文件, 并在配置文件中指定外部的 etcd 集群. 每个 master 节点运行一个 kube-apiserver,kube-scheduler 和 kube-controller-manager 实例, 每个 master 都可以和 etcd 集群通信. 好处自然是低耦合, 大大的降低了风险. 但配置上稍有一些麻烦, 并且需要的服务器要多一些.
二, 默认拓扑部署
1, 使用 ansiable 分发配置, 如: 设置主机名,/etc/hosts 解析, repo 文件, dockerhub 证书, 服务器配置, 安装 docker 等, 不详述了就.(每台服务器)
设置主机名
分发配置主机文件 / etc/hosts
分发 repo 文件
- kube.repo
- 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.repo
- wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- yum clean
- yum makecatch
安装依赖
yum install -y conntrack ipvsadm ipset jq sysstat curl iptables libseccomp
关闭防火墙, swap, 重置 iptables
关闭防火墙
$ systemctl stop firewalld && systemctl disable firewalld
重置 iptables
- iptables -F && iptables -X && iptables -F -t nat && iptables -X -t nat && iptables -P FORWARD ACCEPT
- # 关闭 swap
- swapoff -a
- sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
- # 关闭 selinux
- setenforce 0
- # 关闭 dnsmasq(否则可能导致 docker 容器无法解析域名)
- service dnsmasq stop && systemctl disable dnsmasq
设置系统参数
- cat> /etc/sysctl.d/kubernetes.conf <<EOF
- net.bridge.bridge-nf-call-iptables=1
- net.bridge.bridge-nf-call-ip6tables=1
- net.ipv4.ip_forward=1
- vm.swappiness=0
- vm.overcommit_memory=1
- vm.panic_on_oom=0
- fs.inotify.max_user_watches=89100
- EOF
- sysctl -p /etc/sysctl.d/kubernetes.conf
- #!/bin/bash
- # 开启 forward
- # Docker 从 1.13 版本开始调整了默认的防火墙规则
- # 禁用了 iptables filter 表中 FOWARD 链
- # 这样会引起 Kubernetes 集群中跨 Node 的 Pod 无法通信
- iptables -P FORWARD ACCEPT
- # 加载 ipvs 相关内核模块
- # 如果重新开机, 需要重新加载
- modprobe ip_vs
- modprobe ip_vs_rr
- modprobe ip_vs_wrr
- modprobe ip_vs_sh
- modprobe nf_conntrack_ipv4
- lsmod | grep ip_vs
2, 安装 docker(每台服务器)
# 安装 docker
查看可以安装的版本
- yum list docker-ce --showduplicates|sort -r
- yum install -y docker-ce-18.06.1.ce-3
- cat> /etc/docker/daemon.JSON <<EOF
- {
- "graph": "/docker/data/path",
- "exec-opts": ["native.cgroupdriver=cgroupfs"],
- "registry-mirrors":["https://k9e55i4n.mirror.aliyuncs.com"]
- }
- EOF
- systemctl start docker && systemctl enable docker
3, 安装 kubeadm, kubelet 和 kubectl(每台服务器)
- # 找到安装的版本号
- yum list kubeadm --showduplicates | sort -r
- # 安装指定版本
- yum install -y kubelet-1.14.5 kubeadm-1.14.5 kubectl-1.14.5
- # 查看安装情况
- systemctl cat kubelet
4, 配置高可用
参照 LVS+keepalived 部署高可用集群 https://www.cnblogs.com/zhaobowen/p/13399708.html
5, 初始化第一个 master0
- systemctl daemon-reload
- systemctl enable kubelet
- # 使用 kubeadm-config.YAML 配置 k8s1.14.5 集群
- # cat init.sh
LOAD_BALANCER_DNS="192.168.2.22" **\\ 这个是上一步配置的 VIP 地址 **
- LOAD_BALANCER_PORT="6443"
- # 生成 kubeadm 配置文件
- cat> kubeadm-master.config <<EOF
- apiVersion: kubeadm.k8s.io/v1beta1
- kind: ClusterConfiguration
- # kubernetes 版本
- kubernetesVersion: v1.14.5
- # 使用国内阿里镜像
- imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
- apiServer:
- certSANs:
- - "$LOAD_BALANCER_DNS"
- controlPlaneEndpoint: "$LOAD_BALANCER_DNS:$LOAD_BALANCER_PORT"
- networking:
- podSubnet: 10.244.0.0/16
- EOF
- # 初始化 k8s 集群
- kubeadm init --config=kubeadm-master.config
6, 验证证书有效时间
- cd /etc/kubernetes/pki
- for crt in $(find /etc/kubernetes/pki/ -name "*.crt"); do openssl x509 -in $crt -noout -dates; done
7, 安装网络插件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
8, 拷贝 master 证书到其他 master 节点
- # cat scp.sh
- USER=root
- CONTROL_PLANE_IPS="192.168.3.43 192.168.3.44"
- for host in ${CONTROL_PLANE_IPS}; do
- scp /etc/kubernetes/pki/ca.crt "${USER}"@$host:
- scp /etc/kubernetes/pki/ca.key "${USER}"@$host:
- scp /etc/kubernetes/pki/sa.key "${USER}"@$host:
- scp /etc/kubernetes/pki/sa.pub "${USER}"@$host:
- scp /etc/kubernetes/pki/front-proxy-ca.crt "${USER}"@$host:
- scp /etc/kubernetes/pki/front-proxy-ca.key "${USER}"@$host:
- scp /etc/kubernetes/pki/etcd/ca.crt "${USER}"@$host:etcd-ca.crt
- scp /etc/kubernetes/pki/etcd/ca.key "${USER}"@$host:etcd-ca.key
- scp /etc/kubernetes/admin.conf "${USER}"@$host:
- SSH ${USER}@${host} 'mkdir -p /etc/kubernetes/pki/etcd'
- SSH ${USER}@${host} 'mv /${USER}/ca.crt /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/ca.key /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/sa.pub /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/sa.key /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/front-proxy-ca.crt /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/front-proxy-ca.key /etc/kubernetes/pki/'
- SSH ${USER}@${host} 'mv /${USER}/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt'
- SSH ${USER}@${host} 'mv /${USER}/etcd-ca.key /etc/kubernetes/pki/etcd/ca.key'
- SSH ${USER}@${host} 'mv /${USER}/admin.conf /etc/kubernetes/admin.conf'
- done
9, 加入集群
- #master
- kubeadm join 192.168.2.22:6443 --token qlrq5y.1yhm3rz9r7ynfqf1 --discovery-token-ca-cert-hash sha256:62579157003c3537deb44b30f652c500e7fa6505b5ef6826d796ba1245283899 --experimental-control-plane
- #node
- kubeadm join 192.168.2.22:6443 --token qlrq5y.1yhm3rz9r7ynfqf1 --discovery-token-ca-cert-hash sha256:62579157003c3537deb44b30f652c500e7fa6505b5ef6826d796ba1245283899
参考文档:
外部 etcd 集群拓扑部署
默认拓扑部署 https://www.cnblogs.com/Bjwf125/p/12779719.html
来源: http://www.bubuko.com/infodetail-3651858.html