安装 Kubernetes集群

1、首先配置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的内容如下:

vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0

2、安装kubeadm和相关工具

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

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

启动Docker服务和kubelet服务,并设置为开机自动启动:

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

3、kubeadm config

kubeadm已经进入GA阶段,其控制面初始化和加入节点步骤都支持 大量的可定制内容,因此kubeadm还提供了配置文件功能用于复杂定制。同时,kubeadm将配置文件以ConfigMap的形式保存到集群之中, 便于后续的查询和升级工作。kubeadm config子命令提供了对这一组功能的支持:

序号命令说明
1kubeadm config upload from-file由配置文件上传到集群中生 成ConfigMap
2kubeadm config upload from-flags由配置参数生成ConfigMap
3kubeadm config view查看当前集群中的配置值
4kubeadm config print init-defaults输出kubeadm init默认参数文件的内容
5kubeadm config print join-defaults输出kubeadm join默认参数文件的内容
6kubeadm config migrate在新旧版本之间进行配置转换
7kubeadm config images list列出所需的镜像列表
8kubeadm config images pull拉取镜像到本地

执行kubeadm config print init-defaults,可以取得默认的初始化参数文件:

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

修改默认配置文件init.defaults.yaml

apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.21.0
apiServer:
  timeoutForControlPlane: 4m0s
networking:
  dnsDomain: cluster.local
  serviceSubnet: 192.168.0.0/16
scheduler: {}

4、下载k8s的相关镜像

使用config images pull子命令下载所需镜像

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

报错,主要错误:

Kubernetes version: v1.21.1,依赖/coredns/coredns:v1.8.0,registry.cn-hangzhou.aliyuncs.com/google_containers/coredns/coredns:v1.8.0 不存在

本地执行以下命令:

docker pull coredns/coredns:1.8.0
docker tag coredns/coredns:1.8.0 registry.aliyuncs.com/google_containers/coredns:v1.8.0

5、安装Master

运行kubeadm init命令安装Master

kubeadm init --config=init.defaults.yaml

这里需要注意kubeadm init命令执行完成后的最后几行提示信息,其中包含加入节点的指令(kubeadm join)和所需的Token。

按照提示执行下面的命令,复制配置文件到普通用户的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,并缺乏对容器网络的配置。

用kubectl命令查看ConfigMap:

kubectl get -n kube-system configmap

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

6、安装Node,加入集群

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

这里直接一键安装

6.1、创建init-k8s.sh文件

vim init-k8s.sh
#!/bin/bash
tee /etc/yum.repos.d/kubernetes.repo <<-'EOF'
[kubernetes]
name=Kubernetes Repository
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
if [ $? = 0 ];then
echo "依赖包安装完成"
else
echo "依赖包安装失败,正在退出..."
exit 1
fi
systemctl enable docker && systemctl start docker
systemctl enable kubelet && systemctl start kubelet

添加执行权限

chmod a+x init-k8s.sh

执行一键安装文件

./init-k8s.sh

6.2、切换到master节点操作

  • 生成token
kubeadm token generate
  • 根据token输出添加命令
kubeadm token create 7r3l16.5yzfksso5ty2zzie  --print-join-command --ttl=0

6.3、将本Node加入集群

执行kubeadm join命令(上一步中生成的命令),将本Node加入集群:

kubeadm join 192.168.200.110:6443 --token q0781o.36hkdmnw191g7s9g --discovery-token-ca-cert-hash sha256:c33ef39298513eb8c7879ee21f58eac314c0e22de35465e4a717efd31e9ef9d8

kubeadm在Master上也安装了kubelet,在默认情况下并不参与工作 负载。如果希望安装一个单机All-In-One的Kubernetes环境,则可以执行 下面的命令(删除Node的Label“node-role.kubernetes.io/master”),让Master成为一个Node:

kubectl taint nodes --all node-role.kubernetes.io/master-

7、安装网络插件

执行kubectl get nodes命令,会发现Kubernetes提示Master为 NotReady状态,这是因为还没有安装CNI网络插件:

kubectl get nodes

下面根据kubeadm的提示安装CNI网络插件。对于CNI网络插件,可以有许多选择,请参考https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/#pod-network的说明。

例如,选择weave插件,执行下面的命令即可一键完成安装:

kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"

8、验证集群是否安装完成

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

kubectl get pods --all-namespaces

如果发现有状态错误的Pod,则可以执行kubectl --namespace=kube-system describe pod<pod_name>来查看错误原因,常见的错误原因是镜像没有下载完成。

至此,通过kubeadm工具就实现了Kubernetes集群的快速搭建。如果安装失败,则可以执行kubeadm reset命令将主机恢复原状,重新执行kubeadm init命令,再次进行安装。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐