之前结合实际经验写过一篇k8s集群安装的文章,但是针对的是老版本的安装方法,k8s的组件如今全部采用pod的方式运行,所以又重新安装了本地的集群,现将集群的安装过程整理记录如下。

集群规划如下

角色

ip

节点名称

master

192.168.56.4

v03

node1

192.168.56.2

v01

node2

192.168.56.3

v02

另外还有一台节点v04作为docker的私库,和集群的外挂磁盘所在节点。操作系统使用centos7。

首先集群的master节点要求必须2核以上,所以如果是使用vmware或者virtualbox,需要注意cpu的核数。

安装前的准备

1. 关闭防火墙

2. 关闭selinux

3. 关闭swap,注释掉 fstab中的 /dev/mapper/centos-swap



swapoff -a
vi /etc/fstab
#/dev/mapper/centos-swap swap                    swap    defaults        0 0



4. 修改sysctl的配置, 将net.bridge.bridge-nf-call-iptables设置为1



vi /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1



安装docker

确保所有节点都要安装docker,因为现在k8s的所有组件都是基于pod的,所以即便是master节点,虽然它作为集群的管理节点不会运行我们自己的pod,但是k8s自己本身的组件,例如etcd,apiserver等都是运行在pod中,所以所有节点都需要安装docker。

首先获得docker的yum源,由于连接外网很不方便,而且速度慢,所以我们使用阿里云的yum源,包括后面下载docker镜像,使用的也是阿里源的源。然后安装docker-ce,并设置成开机启动。



wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install docker-ce
 systemctl enable docker
systemctl start docker



配置自己的私有仓库(如果不适用私库,可以略过此步)

由于docker私库要求使用https,为了方便使用,我们使用insecure-registries。

编辑 /etc/docker/daemon.json, 加入下列内容



{ "insecure-registries":["<ip>:5000"] }



其中ip为私库ip,5000端口是默认的私库端口,如果是自定义的,改成相应的端口。

安装 kubelet、kubeadm 和 kubectl

首先设置yum源,添加阿里云为yum源



[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg



然后安装kubectl,kubeadm,kubelet,并设置kubelet的开机启动



yum install kubectl kubeadm kubelet
systemctl enable kubelet.service



kubectl是k8s的命令行工具

kubelet是用于启动pod和容器等

kubeadm用于启动集群,初始化集群

以上步骤需要在所有节点上执行,下面开始分别安装master和node节点。

安装master节点

初始化master节点

在master节点上执行以下命令进行初始化



kubeadm init --pod-network-cidr=10.244.0.0/16



--pod-network-cidr=10.244.0.0/16 是 k8s 的网络插件所需要用到的配置信息,用来给 node 分配子网段。我们使用的的网络插件是 flannel。

执行初始化之前会先做一些检查例如cpu核数等等。如果出现error,要先解决掉error然后重新运行init命令,检查通过后,会开始运行kubeadm的初始化操作,会从官网下载很多image,由于国内网络连接官网很慢,很可能会下载失败,所以我们可以使用阿里云的image,先下载下来,然后再给下载下来的镜像重新打上官网的标签,这样再执行初始化的时候就可以使用下载下来的本地镜像。运行以下命令来下载镜像



docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.19.0 k8s.gcr.io/kube-apiserver:v1.19.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.9-1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.19.0 k8s.gcr.io/kube-controller-manager:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.19.0 k8s.gcr.io/kube-scheduler:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.9-1 k8s.gcr.io/etcd:3.4.9-1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0



kubeadm运行完成后,会提示其他节点加入集群的方法,截图样例如下(由于安装时忘记截图,在网上找了一个截图的样例),如果想要其他节点加入集群根据提示操作即可




k8s 安装redis cluster k8s 安装方案_初始化


master节点的配置

k8s不推荐使用root用户操作,所以创建一个有root权限的用户,然后赋予root权限


添加用户k8s并设置密码
useradd k8s
passwd k8s
使用户具有root权限
chmod 777 /etc/sudoers
vi /etc/sudoers
chmod 440 /etc/sudoers


切换至k8s账户,执行以下命令,即安装完kubeadm后提示的步骤


mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config


运行以下命令安装pod网络(安装flannel),使pod可以相互通信


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


至此,master节点安装完成

安装Node节点

在node节点上执行以下命令,即kubeadm安装完提示的命令,加入集群


kubeadm join 10.0.2.5:6443 --token vc1pde.0f1zq9w3osvx8on7 --discovery-token-ca-cert-hash sha256:b4b4c0661363ff0cb95eb4d68bfce605da64a563a3e834827784c08fbdc7f8ba


安装需要的镜像

在每一个 node 节点上我们还需要下载 quay.io/coreos/flannel:v0.11.0-amd64、k8s.gcr.io/pause 和 k8s.gcr.io/kube-proxy 这三个镜像,第一个可以直接下载,后两个仍然采用先从国内源下载然后打标签的方式


docker pull Quay
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.19.0 k8s.gcr.io/kube-proxy:v1.19.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2


可以在master节点上运行命令 kubectl get nodes查看集群节点的状态。

至此node节点也安装完成。

其他设置

这里主要是设置nfs,我们使用nfs来做volume的映射。找一台vm做nfs的server,在集群的所有节点上安装nfs服务。并设置开机启动


yum install rpcbind nfs-utils
systemctl enable rpcbind.service
service rpcbind start


在server节点做如下配置


# cat /etc/exports
/data/k8s/ 192.168.56.0/24(sync,rw,no_root_squash)


/data/k8s/ 是挂载的目录

192.168.56.0/24 是允许挂载的客户端ip的所在网段

sync 同时将数据写入到内存与硬盘中,保证不丢失数据

rw 读写

no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员

在客户端使用showmount -e 192.168.56.5查看是否可以正常挂载,显示如下证明可以正常挂载


# showmount -e 192.168.56.5
Export list for 192.168.56.5:
/data/k8s 192.168.56.0/24


至此k8s的集群的安装已经完成。