一、安装前的准备工作
在安装k8s集群前,我们需要进行一些准备工作:
1、选择合适的操作系统
Ubuntu18.04及以上版本、CentOS7及以上版本、Debian9及以上版本等
2、准备至少3台物理或虚拟机
1台Master节点,2台或以上的Worker节点
3、配置节点的主机名和hosts
修改 /etc/hosts 文件,加入各节点主机名和对应的IP地址
二、安装Docker
通过Docker来管理Kubernetes所需要的容器。
1、安装必要的一些系统工具
$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
2、添加Docker官方的GPG密钥
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
3、添加Docker的安装源
Ubuntu 20.10:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
Ubuntu 18.04:
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
CentOS 7:
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
4、更新apt或yum包列表
$ sudo apt-get update
$ sudo yum makecache
5、安装Docker
$ sudo apt-get install docker-ce docker-ce-cli containerd.io
$ sudo yum install docker-ce docker-ce-cli containerd.io
6、启动Docker服务
$ sudo systemctl start docker
$ sudo service docker start
7、设置Docker开机自启
$ sudo systemctl enable docker
$ sudo chkconfig docker on
8、验证Docker是否安装成功
$ sudo docker run hello-world
三、安装Kubernetes
1、添加阿里云的Kubernetes安装源和GPG密钥
$ cat <
/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
$ curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -
2、安装Kubectl和Kubeadm
$ sudo apt-get update
$ sudo apt-get install -y kubelet kubeadm kubectl
3、拉取所需镜像
$ sudo kubeadm config images pull
4、初始化Master节点
创建 kubeadm.yaml 文件
apiVersion: kubeadm.k8s.io/v1beta2
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.0.100 # Master节点IP地址
bindPort: 6443
---
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
kubernetesVersion: stable
controlPlaneEndpoint: "k8s-ha:6443" # 集群VIP地址
dnsDomain: cluster.local
apiServer:
certSANs:
- 192.168.0.100 # Master节点IP地址
- 127.0.0.1
- k8s-ha
controlPlaneEndpoint: k8s-ha:6443 # 安装会创建 HAProxy 服务自动配置
networking:
podSubnet: "10.244.0.0/16" # 此IP段不能与实际网络中的IP段冲突
EOF
执行初始化Master命令
$ sudo kubeadm init --config kubeadm.yaml
如果因为网络原因等导致初始化失败,可以使用如下命令重置
$ sudo kubeadm reset -f
5、配置kubectl
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
6、部署网络插件
# 选择 Calico 网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
7、将Worker节点加入集群
在每个启动了Docker的 Worker 节点上运行初始化命令
$ sudo kubeadm join k8s-ha:6443 --token xxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxx
8、查看节点状态
$ kubectl get nodes
四、使用HAProxy部署高可用Kubernetes集群
1、安装HAProxy
$ sudo apt-get install haproxy -y
2、替换HAProxy的配置文件
修改/haproxy/haproxy.cfg文件(注释掉原文件所有内容,并用以下内容替换):
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL).
ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
frontend k8s-frontend
bind *:6443
mode tcp
default_backend k8s-backend
backend k8s-backend
mode tcp
balance roundrobin
option tcp-check
server k8s-master-1 192.168.0.100:6443 check inter 1000 rise 3 fall 3
server k8s-master-2 192.168.0.101:6443 check inter 1000 rise 3 fall 3
server k8s-master-3 192.168.0.102:6443 check inter 1000 rise 3 fall 3
3、开启ip_forward
$ sudo sysctl net.ipv4.ip_forward=1
$ sudo sysctl -p
4、启动HAProxy服务
$ systemctl restart haproxy
5、重启所有Master节点
$ systemctl restart kubelet
6、在Master节点上检查集群状态
$ kubectl get nodes
如果所有节点处于 Ready 状态,则Kubernetes集群已成功高可用部署。