Kubernetes需要容器运行时(Container Runtime Interface,CRI)的 支持,目前官方支持的容器运行时包括:Docker、Containerd、CRI-O和 frakti。
安装条件:
本节以Docker作为容器 运行环境,推荐版本为Docker CE 18.09。
宿主机操作系统以CentOS Linux 7为例,使用Systemd系统完成对 Kubernetes服务的配置。
1、而Kubernetes的Master与工作Node之间会有大量的网络通 信,安全的做法是在防火墙上配置各组件需要相互通信的端口号,具体 要配置的端口号详见2.8节各服务启动参数中监听的端口号。在安全的 内部网络环境中可以关闭防火墙服务:
然后运行yum install命令安装并启动kubeadm和相关工具:
#yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
#systemctl enable kubelet && systemctl start kubelet
2、kubeadm config
kubeadm将配置文件以ConfigMap的形式保存到集群之中, 便于后续的查询和升级工作。kubeadm config子命令提供了对这一组功 能的支持:
◎ kubeadm config upload from-file:由配置文件上传到集群中生 成ConfigMap。
◎ kubeadm config upload from-flags:由配置参数生成 ConfigMap。
◎ kubeadm config view:查看当前集群中的配置值。
◎ kubeadm config print init-defaults:输出kubeadm init默认参数文 件的内容。
◎ kubeadm config print join-defaults:输出kubeadm join默认参数 文件的内容。
◎ kubeadm config migrate:在新旧版本之间进行配置转换。
◎ kubeadm config images list:列出所需的镜像列表。
◎ kubeadm config images pull:拉取镜像到本地。
例如,执行kubeadm config print init-defaults,可以取得默认的初始 化参数文件:
3、下载Kubernetes的相关镜像
为了从国内的镜像托管站点获得镜像加速支持,建议修改Docker的 配置文件,增加Registry Mirror参数,将镜像配置写入配置参数中,例 如echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json,然后重启Docker服务。
在镜像下载完成之后,就可以进行安装了
4、运行kubeadm init命令安装Master
至此,准备工作已就绪,执行kubeadm init命令即可一键安装 Kubernetes的Master。
在开始之前需要注意:kubeadm的安装过程不涉及网络插件 (CNI)的初始化,因此kubeadm初步安装完成的集群不具备网络功 能,任何Pod包括自带的CoreDNS都无法正常工作。而网络插件的安装 往往对kubeadm init命令的参数有一定的要求。例如,安装Calico插件时 需要指定--pod-network-cidr=192.168.0.0/16,详情可参考 https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#podnetwork。
接下来使用kubeadm init命令,使用前面创建的配置文件进行集群 控制面的初始化
kubectl init --config=init-config.yaml
初始化成功后,复制这一段token
按照提示执行下面的命令,复制配置文件到普通用户的home目录 下:
这样就在Master上安装了Kubernetes,但在集群内还是没有可用的 工作Node,并缺乏对容器网络的配置。
5、安装Node,加入集群
node节点也需要安装docker
对于新节点的添加,系统准备和Kubernetes yum源的配置过程是一 致的,在Node主机上执行下面的安装过程。 (1)安装kubeadm和相关工具:
yum install -y kubelet kubeadm --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
为kubeadm命令生成配置文件。创建文件join-config.yaml,内 容如下:(手动创建一个如下文件)
其中,apiServerEndpoint的值来自Master服务器的地址,token和 tlsBootstrapToken的值就来自于使用kubeadm init安装Master的最后一行 提示信息。
执行kubeadm join命令,将本Node加入集群:
6、安装网络插件
执行kubectl get nodes命令,会发现Kubernetes提示Master为 NotReady状态,这是因为还没有安装CNI网络插件:
下面根据kubeadm的提示安装CNI网络插件。对于CNI网络插件,可 以有许多选择,请参考https://kubernetes.io/docs/setup/independent/createcluster-kubeadm/#pod-network的说明。
7、验证Kubernetes集群是否安装完成。
执行下面的命令,验证Kubernetes集群的相关Pod是否都正常创建并 运行:
如果发现有状态错误的Pod,则可以执行kubectl --namespace=kubesystem describe pod<pod_name>来查看错误原因,常见的错误原因是镜 像没有下载完成。
至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。
如 果安装失败,则可以执行kubeadm reset命令将主机恢复原状,重新执行 kubeadm init命令,再次进行安装。