目录
基于kubeadm部署K8S集群
一、环境准备
1、主机初始化配置
2、配置主机名并绑定hosts,不同主机名称不同
3、主机配置初始化
二、部署docker环境
1、三台主机上分别部署 Docker 环境
2、镜像加速器(所有主机配置)
三、部署kubernetes集群
(一)组件介绍
(二)配置阿里云yum源
(三)安装kubelet kubeadm kubectl
(四)配置init-config.yaml
init-config.yaml配置
(五)安装master节点
2、安装matser节点
3、根据提示操作
(六)安装node节点
IP地址 |
主机名 |
组件 |
192.168.100.131 |
k8s-master |
kubeadm、kubelet、kubectl、docker-ce |
192.168.100.132 |
k8s-node01 |
kubeadm、kubelet、kubectl、docker-ce |
192.168.100.133 |
k8s-node02 |
kubeadm、kubelet、kubectl、docker-ce |
注意:所有主机配置推荐CPU:2C+ Memory:2G+
所有主机配置禁用防火墙和selinux
[root@localhost ~]# setenforce 0
[root@localhost ~]# iptables -F
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# systemctl disable NetworkManager
[root@localhost ~]# sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
[root@localhost ~]# hostname k8s-master
[root@localhost ~]# bash
[root@k8s-master ~]# cat << EOF >> /etc/hosts
192.168.100.131 k8s-master
192.168.100.132 k8s-node01
192.168.100.133 k8s-node02
EOF
[root@k8s-master ~]# scp /etc/hosts 192.168.100.132:/etc/
[root@k8s-master ~]# scp /etc/hosts 192.168.100.133:/etc/
[root@localhost ~]# hostname k8s-node01
[root@localhost ~]# bash
[root@localhost ~]# hostname k8s-node02
[root@localhost ~]# bash
(所有主机,且配置为2核2G)
[root@k8s-master ~]# yum -y install vim wget net-tools lrzsz
[root@k8s-master ~]# swapoff -a必须为两G的运行否则:
[root@k8s-master ~]# sed -i '/swap/s/^/#/' /etc/fstab
[root@k8s-node01 ~]# vim /etc/sysctl.conf
[root@k8s-node01 ~]# modprobe br_netfilter
[root@k8s-node01 ~]# sysctl -p
因为 Kubernetes 对容器的编排需要 Docker 的支持。
[root@k8s-master ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@k8s-master ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
使用 YUM 方式安装 Docker 时,推荐使用阿里的 YUM 源。阿里的官方开源站点地址是:https://developer.aliyun.com/mirror/,可以在站点内找到 Docker 的源地址。
[root@k8s-master ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@k8s-master ~]# yum clean all && yum makecache fast
[root@k8s-master ~]# yum -y install docker-ce
[root@k8s-master ~]# systemctl start docker
[root@k8s-master ~]# systemctl enable docker
很多镜像都是在国外的服务器上,由于网络上存在的问题,经常导致无法拉取镜像的错误,所以最好将镜像拉取地址设置成国内的。目前国内很多公有云服务商都提供了镜像加速服务。镜像加速配置如下所示。
https://dockerhub.azk8s.cn //Azure 中国镜像
https://hub-mirror.c.163.com //网易云加速器
[root@k8s-master ~]# vim /etc/docker/daemon.json
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart docker
将镜像加速地址直接写入/etc/docker/daemon.json 文件内,如果文件不存在,可直接新建文件并保存。
通过该文件扩展名可以看出,daemon.json 的内容必须符合 json 格式,书写时要注意。同时,由于单一镜像服务存在不可用的情况,在配置加速时推荐配置两个或多个加速地址,从而达到冗余、高可用的目的。
三个节点都需要安装下面三个组件
1、kubeadm:安装工具,使所有的组件都会以容器的方式运行
2、kubectl:客户端连接K8S API工具
3、kubelet:运行在node节点,用来启动容器的工具
推荐使用阿里云的yum源安装:
[root@k8s-master ~]#
vim /etc/yum.repos.d/kubernetes.repo
[root@k8s-master ~]# ls /etc/yum.repos.d/
所有主机配置
[root@k8s-master ~]# yum -y install kubelet-1.20.0 kubeadm-1.20.0 kubectl-1.20.0
[root@k8s-master ~]# systemctl enable kubelet
kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点或初始化为 master 后才可启动成功。
如果在命令执行过程中出现索引 gpg 检查失败的情况, 请使用 yum install -y --nogpgcheck kubelet kubeadm kubectl 来安装。
Kubeadm 提供了很多配置项,Kubeadm 配置在 Kubernetes 集群中是存储在ConfigMap 中的,也可将这些配置写入配置文件,方便管理复杂的配置项。Kubeadm 配内容是通过 kubeadm config 命令写入配置文件的。
在master节点安装,master 定于为192.168.100.131,通过如下指令创建默认的init-config.yaml文件:
[root@k8s-master ~]# kubeadm config print init-defaults > init-config.yaml
其中,kubeadm config 除了用于输出配置项到文件中,还提供了其他一些常用功能,如下所示。
1)kubeadm config view:查看当前集群中的配置值。
2)kubeadm config print join-defaults:输出 kubeadm join 默认参数文件的内容。
3)kubeadm config images list:列出所需的镜像列表。
4)kubeadm config images pull:拉取镜像到本地。
5)kubeadm config upload from-flags:由配置参数生成 ConfigMap。
[root@k8s-master ~]# cat init-config.yaml
1、拉取所需镜像
[root@k8s-master ~]# kubeadm config images list --config init-config.yaml
[root@k8s-master ~]# kubeadm config images pull --config=init-config.yaml
[root@k8s-master ~]#
echo "1" > /proc/sys/net/ipv4/ip_forward
[root@k8s-master ~]#
kubeadm init --config=init-config.yaml
//初始化安装K8S
Ps备注:在此一定要注意k8s和docker的版本,在这里,我用的docker版本是19,k8s版本是1.20,如果有其他的情况导致k8s不支持docker版本,会出现下列情况:
kubectl 默认会在执行的用户家目录下面的.kube 目录下寻找config 文件。这里是将在初始化时[kubeconfig]步骤生成的admin.conf 拷贝到.kube/config
[root@k8s-master ~]# mkdir -p $HOME/.kube
[root@k8s-master ~]# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
[root@k8s-master ~]# chown $(id -u):$(id -g) $HOME/.kube/config
kubeadm init 主要执行了以下操作:
l [init]:指定版本进行初始化操作
l [preflight] :初始化前的检查和下载所需要的Docker镜像文件
l [kubelet-start] :生成kubelet 的配置文件”/var/lib/kubelet/config.yaml”,没有这个文件kubelet无法启动,所以初始化之前的kubelet 实际上启动失败。
l [certificates]:生成Kubernetes 使用的证书,存放在/etc/kubernetes/pki 目录中。
l [kubeconfig] :生成 Kubeconfig 文件,存放在/etc/kubernetes 目录中,组件之间通信需要使用对应文件。
l [control-plane]:使用/etc/kubernetes/manifest 目录下的YAML 文件,安装 Master 组件。
l [etcd]:使用/etc/kubernetes/manifest/etcd.yaml 安装Etcd 服务。
l [wait-control-plane]:等待control-plan 部署的Master 组件启动。
l [apiclient]:检查Master组件服务状态。
l [uploadconfig]:更新配置
l [kubelet]:使用configMap 配置kubelet。
l [patchnode]:更新CNI信息到Node 上,通过注释的方式记录。
l [mark-control-plane]:为当前节点打标签,打了角色Master,和不可调度标签,这样默认就不会使用Master 节点来运行Pod。
l [bootstrap-token]:生成token 记录下来,后边使用kubeadm join 往集群中添加节点时会用到
l [addons]:安装附加组件CoreDNS 和kube-proxy
Kubeadm 通过初始化安装是不包括网络插件的,也就是说初始化之后是不具备相关网络功能的,比如 k8s-master 节点上查看节点信息都是“Not Ready”状态、Pod 的 CoreDNS无法提供服务等。
根据master安装时的提示信息
两个node节点操作:
[root@k8s-node01 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
[root@k8s-node02 ~]# kubeadm join 192.168.100.131:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:78bdd0f01660f4e84355b70aa8807cf1d0d6325b0b28502b29c241563e93b4ae
Master操作:
[root@k8s-master ~]# kubectl get nodes
前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。