kubeadm 在线搭建k8s环境

1.各相关组件及主机环境

centos、docker-ce、kubernetes1.12

集群主机环境

主机ip 主机名 角色
10.57.31.22 k8s-master master
10.57.31.23 k8s-node-1 node1
10.57.31.24 k8s-node-2 node2

将上面的主机配置添加到master和node上的/etc/hosts中

2.主机系统环境设置

  1. 关闭防火墙服务
systemctl stop firewalld.service iptables.service
systemctl disable firewalld.service
systemctl disable iptables.service
  1. 关闭并禁用SELinux

setenforce 0

//彻底禁用SELinux
sed -i 's@^(SELINUX=).*@\1disabled@' /etc/sysconfig/selinux

  1. 禁用swap设备(可选)
swapoff -a

而后编辑/etc/fstab配置文件,注释用户挂载swap设备的所有行

3.docker安装

master和node上都需要安装

wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install docker-ce

如果安装中出现Transaction check error:错误,说明之前安装过docker未清理干净,需要执行下 sudo yum erase docker-common-2:1.13.1-96.gitb2f74b2.el7.centos.x86_64(根据报错是什么版本后面就写什么 );安装下载不成功,执行yum clean all试试

kubeadm构建集群的过程中需要到gcr.io获取docker镜像,所以需要配置能够访问的http代理,或者从自己的Registry仓库拉取镜像,代理的方法是在[service]配置端中添加类似如下格式的配置项:Environment="HTTP-PROXY=http://IP:PORT"或Environment="HTTPS-PROXY=https://IP:PORT,(后面我们会介绍另外一种拉取gcr.io镜像的方法)

docker自1.13起自动设置iptables的FORWARD默认策略为DROP,这会影响k8s的报文转发,因此,需要早docker启动后,更改为ACCEPT;方式为修改/usr/lib/systemd/system/docker.service文件,在"ExecStat=/usr/bin/dockerd"一行之后新增一行如下内容:

EexcStartPost=/usr/sbin/iptables -P FORWARD ACCEPT

温馨提示:docker的镜像下载慢,需要更改daemon.json,在/etc/docker/daemon.json文件(没有则创建),文件内容为
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
后面的地址可以使用别的快的,国内的;这里是中国科技大学的镜像加速服务

然后重启下docker

systemctl daemon-reload
systemctl start docker.service
systemctl enable docker.service

4.安装kubelet及kubeadm

采用阿里云仓库中rpm方式安装;还有其他方式自行研究下

4.1配置yum仓库

编辑配置文件/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

4.2然后执行命令安装程序包

master上安装kubelet、kubeadm、kubectl
node上安装kubelet、kubeadm

 yum install kubelet kubeadm kubectl

4.3

关闭下kubelet需要强制关闭swap的需求,编辑/etc/sysconfig/kubelet,设置参数:

KUBELET_EXTRA_ARGS="--fail-swap-on=false"
然后

systemctl restart kubelet.service
systemctl enable kubelet.service

4.4提前下载下gcr.io的镜像

先看下需要哪些镜像,kubeadm config images list


kubeadm 在线搭建k8s环境_第1张图片
image.png

我们通过 docker.io/mirrorgooglecontainers 中转一下
脚本如下:

//下载镜像
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
//打tag
 docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#mirrorgooglecontainers#k8s.gcr.io#2' |sh -x
//移除mirrorgooglecontainers的镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x
//coredns需要单独下载
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1

可惜的是最新版本的1.15.2在中转站里面没有,我只下载到了这些:


image.png

还剩下controller-manager和scheduler需要下载,采取另外一种方式手动下载这两个,参考我的另外一片文章https://www.jianshu.com/p/447130682e08
(也可以使用其他能够下到镜像的方式)

最后我们把镜像重新docker tag成kubeadm需要的镜像,最终结果


kubeadm 在线搭建k8s环境_第2张图片
image.png

5.集群初始化(master)

采用命令行方式
说明:

--kubernetes-version: 正在使用的k8s的版本号,可以看下相关docker镜像的版本
--pod-network-cidr: Pod网络的地址范围;
--service-cidr:的网路地址范围
--apiserver-advertise-address: Apiserver对外服务的地址,一般为master的ip

kubeadm init --kubernetes-version=v1.15.2 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=10.57.31.22 --ignore-preflight-errors=Swap

输出结果末尾有类似:kubeadm join 10.57.31.22:6443 --token ecc3mr.wdbc1ptao2ep6h95
--discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e 这样的命令,记录下来用来后续添加node到集群中

5.1设定kubectl的配置文件

kubeadm会自动生成一个/etc/kubernetes/admin.conf;然后kubectl默认会使用$HOME/.kube/config作为凭据,所以我们执行

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

查看下状态

//获取组件状态
kubectl get cs
//获取节点状态,(not ready 因为还没有安装网络插件)
kubectl get nodes

6.部署网络插件Flannel

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

完成之后稍微等一会再通过kubectl get nodes就能看到Ready的master节点了

7.添加Node到集群中

使用kubeadm init输出末尾的命令,加上个--ignore-preflight-errors=Swap;到Node节点上执行命令:

kubeadm join 10.57.31.22:6443 --ignore-preflight-errors=Swap --token ecc3mr.wdbc1ptao2ep6h95  --discovery-token-ca-cert-hash sha256:40045492e5e0c54ddb9b2645b989337bb29ea76e7025f38ef7465caa477dcd8e

你可能感兴趣的:(kubeadm 在线搭建k8s环境)