之前结合实际经验写过一篇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运行完成后,会提示其他节点加入集群的方法,截图样例如下(由于安装时忘记截图,在网上找了一个截图的样例),如果想要其他节点加入集群根据提示操作即可
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的集群的安装已经完成。