使用kubeadm工具快速安装Kubernetes集群

使用kubeadm工具快速安装Kubernetes集群

1.安装前准备

关闭防火墙;关闭SELinux;关闭Swap交换分区:swapoff -a;master与node之间ssh免密登录;同步NTP时间;所有IP均能访问外网。操作过程略。

2.安装kubernetes

2.1 安装kubeadm和相关工具(所有节点都执行)

首先配置yum源,官方yum源的地址为https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64。如果无法访问官方yum源的地址,则也可以使用国内的一个yum源,地址为http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/,yum源的配置文件/etc/yum.repos.d/kubernetes.repo的内容如下:

[kubernetes]
​
name=Kubernetes Respository
​
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
​
enabled=1
​
gpgcheck=0

然后运行yum install命令安装kubeadm和相关工具:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

运行下面的命令,启动Docker服务(如果已安装Docker,则无须再次启动)和kubelet服务,并设置为开机自动启动:

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

2.2 kubeadm config(master节点执行)

kubeadm已经进入GA阶段,其控制面初始化和加入节点步骤都支持大量的可定制内容,因此kubeadm还提供了配置文件功能用于复杂定制。同时,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,可以取得默认的初始化参数文件:

kubeadm config print init-defaults > init-defaults.yaml

对生成的文件进行编辑,可以按需生成合适的配置。例如,若需要定制镜像仓库的地址,以及Pod的地址范围,则可以使用如下配置,保存为init-config.yaml:

apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: v1.18.0
networking:
  podSubnet: 10.100.0.0/16

2.3 下载Kubernetes的相关镜像(master节点执行)

为了从国内的镜像托管站点获得镜像加速支持,建议修改Docker的配置文件,增加RegistryMirror参数,将镜像配置写入配置参数中,例如echo '{"registry-mirrors":["https://registry.docker-cn.com"]}' > /etc/docker/daemon.json,然后重启Docker服务。使用config images pull子命令下载所需镜像,例如:

kubeadm config images pull --config=init-config.yaml

在镜像下载完成之后,就可以进行安装了。

2.4 运行kubeadm init命令安装Master(master节点执行)

至此,准备工作已就绪,执行kubeadm init命令即可一键安装Kubernetes的Master。接下来使用kubeadm init命令,使用前面创建的配置文件进行集群控制面的初始化:

kubeadm init --config=init-config.yaml

运行后,控制台将输出如下内容:

W0617 10:38:46.933103    9828 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.0
[preflight] Running pre-flight checks
        [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
        [WARNING Hostname]: hostname "laoyao-1.novalocal" could not be reached
        [WARNING Hostname]: hostname "laoyao-1.novalocal": lookup laoyao-1.novalocal on 114.114.114.114:53: no such host
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"

等待一段时间后,Kubernetes的Master安装成功,显示如下信息:

[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

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

You should now deploy a pod network to the cluster.

按照提示执行下面的命令,复制配置文件到普通用户的home目录下:

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

这样就在Master上安装了Kubernetes,但在集群内还是没有可用的工作Node,并缺乏对容器网络的配置。这里需要注意kubeadm init命令执行完成后的最后几行提示信息,其中包含加入节点的指令(kubeadm join)和所需的Token。

此时可以用kubectl命令验证在2.2.2节中提到的ConfigMap:

[root@laoyao-1 ~]# kubectl get -n kube-system configmap
NAME                                 DATA   AGE
coredns                              1      7h34m
extension-apiserver-authentication   6      7h34m
kube-flannel-cfg                     2      7h24m
kube-proxy                           2      7h34m
kubeadm-config                       2      7h34m
kubelet-config-1.18                  1      7h34m

可以看到其中生成了名为kubeadm-config的ConfigMap对象。

2.5 node加入集群(node节点执行)

对于新节点的添加,系统准备和Kubernetes yum源的配置过程是一致的,在Node主机上执行下面的安装过程。

1)安装kubeadm和相关工具:

yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

2) 运行下面的命令启动Docker服务与kubelet服务,并将其设置为开机自启动:

systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

(2)为kubeadm命令生成配置文件。创建文件join-config.yaml,内容如下:

apiVersion: kubeadm.k8s.io/v1beta2
kind: JoinConfiguration
discovery:
  bootstrapToken:
    apiServerEndpoint: 192.168.10.9:6443
    token: uq6j15.qlvmxtwx2wrakv7s
    unsafeSkipCAVerification: true
  tlsBootstrapToken: uq6j15.qlvmxtwx2wrakv7s

其中,apiServerEndpoint的值来自Master服务器的地址,token和tlsBootstrapToken的值就来自于使用kubeadm init安装Master的最后一行提示信息。如果忘记了token信息和证书信息可使用以下命令查询:

[root@laoyao-1 ~]# kubeadm token list
TOKEN                     TTL         EXPIRES                     USAGES                   DESCRIPTION                                                EXTRA GROUPS
uq6j15.qlvmxtwx2wrakv7s   16h         2020-06-18T10:39:15+08:00   authentication,signing                                                        system:bootstrappers:kubeadm:default-node-token

token 24小时失效可使用如下命令重新创建:

kubeadm token create

3)执行kubeadm join --config命令,将本Node加入集群:

2.6 验证Kubernetes集群是否安装完成

执行下面的命令,验证Kubernetes集群的相关Pod是否都正常创建并运行:

[root@laoyao-1 ~]# kubectl get pods --all-namespaces
NAMESPACE     NAME                                         READY   STATUS    RESTARTS   AGE
kube-system   coredns-7ff77c879f-fkmw8                     1/1     Running   0          6h31m
kube-system   coredns-7ff77c879f-th4pb                     1/1     Running   0          6h31m
kube-system   etcd-laoyao-1.novalocal                      1/1     Running   3          6h31m
kube-system   kube-apiserver-laoyao-1.novalocal            1/1     Running   4          6h31m
kube-system   kube-controller-manager-laoyao-1.novalocal   1/1     Running   6          6h31m
kube-system   kube-flannel-ds-amd64-lh2ns                  1/1     Running   0          6h17m
kube-system   kube-flannel-ds-amd64-nw72n                  1/1     Running   0          6h22m
kube-system   kube-proxy-96kd6                             1/1     Running   0          6h31m
kube-system   kube-proxy-pkwmh                             1/1     Running   0          6h17m
kube-system   kube-scheduler-laoyao-1.novalocal            1/1     Running   6          6h31m

如果发现有状态错误的Pod,则可以执行kubectl --namespace=kube-system describepod来查看错误原因,常见的错误原因是镜像没有下载完成。至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。如果安装失败,则可以执行kubeadm reset命令将主机恢复原状,重新执行kubeadm init命令,再次进行安装。

你可能感兴趣的:(k8s,kubernetes,docker)