关闭防火墙;关闭SELinux;关闭Swap交换分区:swapoff -a;master与node之间ssh免密登录;同步NTP时间;所有IP均能访问外网。操作过程略。
首先配置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
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
为了从国内的镜像托管站点获得镜像加速支持,建议修改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
在镜像下载完成之后,就可以进行安装了。
至此,准备工作已就绪,执行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对象。
对于新节点的添加,系统准备和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加入集群:
执行下面的命令,验证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