发布时间 2019-12-21 20:36:35
ansible+kubeadm搭建k8s高可用集群
- 环境要求和集群规划
1.1. 环境准备
操作系统:CentOS7.4 mini安装
系统内核:4.4.179(升级内核)
1.2. 版本和网络规划
组件版本:
k8s组件 etcd docker calico
1.14.1 3.3.10 18.06.3-ce 3.6.1
网络规划(要求集群网络都不可以与公司内网网段冲突):
物理服务器/虚拟机网络 集群内部服务网络 集群内部通讯网络
192.168.33.0/24 10.254.0.0/16 172.88.0.0/16
1.3. 其他说明
集群规划:脚本支持安装2到多个节点,因为最初是面向集群安装的,所以默认安装了haproxy和keepalived。
建议集群:3个master节点 + n个worker(n>0)节点
- 部署k8s集群
2.1. 安装准备
(使用root用户)
-
设置主机名:hostnamectl set-hostname srv1.k8s.com/srv2.k8s.com/…
-
上传安装包(ansible目录)到master节点/root/目录
-
安装ansible:rpm -Uvh ansible/ansible2.7/*
-
查看安装是否成功:ansible --version
-
替换ansible目录内容:cd && rm -rf /etc/ansible && mv ansible /etc/
2.2. 安装集群
- 配置集群规划(非常重要):vi /etc/ansible/hosts
[lb]:是两台haproxy和keepalived所在服务器,其中master是keepalived所在master节点,backup是keepalived所在slave节点。
[master]:是k8s集群master节点组,master可以只部署一个,也可以有多个。
[worker]:k8s集群工作节点组,不能和[master]组有重复ip地址。
[all:vars]:是集群部署用到的变量。其中MASTER_IP是k8s集群的虚拟ip,需要跟集群服务器ip地址保持同一个网段;KUBE_APISERVER是k8s集群对外服务的访问方式,SERVICE_CIDR是k8s集群内部服务的ip网段(不能和内网网段冲突),CLUSTER_CIDR是集群内部通讯地址网段(不能和内网网段冲突)。
- 执行一键安装脚本:cd /etc/ansible && source 000.onekey.sh
这里是生成密钥,三次回车即可。
这里需要输入root用户ssh使用的密码,要求所有密码一致。
- 查看部署情况:kubectl get nodes
到这里,k8s集群+coredns+dashboard已经部署完成。
上面截图是单master部署,多个master会显示多个master节点。
扩展组件安装请根据实际需要查看“k8s组件安装”
- 访问集群dashboard:火狐浏览器打开:https://{{MASTER_IP}}:32000
点击高级–>点击接受风险并继续
获取令牌:kubectl describe secret admin-token -n kube-system
复制白色部分,粘贴到令牌输入框,登录
然后就可以看到k8s集群的dashboard了
- 其他
3.1. 升级或者回退系统内核版本
-
下载系统内核:
https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-4.4.179-1.el7.elrepo.x86_64.rpm -
安装内核:rpm -ivh kernel-lt-4.4.179-1.el7.elrepo.x86_64.rpm
-
设置开机默认启动内核:grub2-set-default 0
-
重启生效:reboot
-
重启后确认内核版本:uname -r
3.2. 组件或镜像下载
-
CentOS7.4镜像:
-
docker-ce:
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/ -
kubeadm/kubectl/kubelet组件rpm:
配置yum源和yum缓存,然后yum安装后保存rpm包即可。
- 下载组件镜像
一键脚本:bash image_list.sh
#!/bin/bash
tag1=“mirrorgooglecontainers”
tag2=“k8s.gcr.io”
for i in {kube-apiserver:v1.14.1,kube-controller-manager:v1.14.1,kube-scheduler:v1.14.1,kube-proxy:v1.14.1,pause:3.1,etcd:3.3.10}
do
docker pull
t
a
g
1
/
{tag1}/
tag1/{i}
docker tag
t
a
g
1
/
{tag1}/
tag1/{i}
t
a
g
2
/
{tag2}/
tag2/{i}
docker rmi
t
a
g
1
/
{tag1}/
tag1/{i}
done
docker pull coredns/coredns:1.3.1 && docker tag coredns/coredns:1.3.1 gcr.k8s.io/coredns:1.3.1 && docker rmi coredns/coredns:1.3.1
获取kubeadm需要的镜像:kubeadm config images list
替换成国内镜像后:
[root@srv1 ansible]# cat image_list
mirrorgooglecontainers/kube-apiserver:v1.14.1
mirrorgooglecontainers/kube-controller-manager:v1.14.1
mirrorgooglecontainers/kube-scheduler:v1.14.1
mirrorgooglecontainers/kube-proxy:v1.14.1
mirrorgooglecontainers/pause:3.1
mirrorgooglecontainers/etcd:3.3.10
coredns/coredns:1.3.1
下载镜像
[root@srv1 ansible]# for i in $(cat image_list);do docker pull $i;done
v1.14.1: Pulling from mirrorgooglecontainers/kube-apiserver
Digest: sha256:2753dd7433d2946db3bfc47ea26443ee63499453f4fcb68f3b36bcc2e979aa9d
Status: Downloaded newer image for mirrorgooglecontainers/kube-apiserver:v1.14.1
v1.14.1: Pulling from mirrorgooglecontainers/kube-controller-manager
Digest: sha256:5105de4f56660b76d79c59837776192580c93ada138c92030edcbdd5500b6723
Status: Downloaded newer image for mirrorgooglecontainers/kube-controller-manager:v1.14.1
v1.14.1: Pulling from mirrorgooglecontainers/kube-scheduler
Digest: sha256:f83017e9e88d28ba8cc4c0df9fbeeb1865f2625bcff5ec0463ddeb77d56e349b
Status: Downloaded newer image for mirrorgooglecontainers/kube-scheduler:v1.14.1
v1.14.1: Pulling from mirrorgooglecontainers/kube-proxy
Digest: sha256:8a0b649e306c6a2df39c0920a029ac85caf331a12665ed48e2eec0095bb6c5e2
Status: Downloaded newer image for mirrorgooglecontainers/kube-proxy:v1.14.1
3.1: Pulling from mirrorgooglecontainers/pause
Digest: sha256:59eec8837a4d942cc19a52b8c09ea75121acc38114a2c68b98983ce9356b8610
Status: Downloaded newer image for mirrorgooglecontainers/pause:3.1
3.3.10: Pulling from mirrorgooglecontainers/etcd
Digest: sha256:8a82adeb3d0770bfd37dd56765c64d082b6e7c6ad6a6c1fd961dc6e719ea4183
Status: Downloaded newer image for mirrorgooglecontainers/etcd:3.3.10
1.3.1: Pulling from coredns/coredns
Digest: sha256:02382353821b12c21b062c59184e227e001079bb13ebd01f9d3270ba0fcbf1e4
Status: Downloaded newer image for coredns/coredns:1.3.1
重新给镜像打tag