上网查看相关文章发现目前部署kuberneters比较多的方法是kubeadm和二进制文件直接部署。kubeadm实际是下载封装好的k8s各个服务的docker镜像,然后通过docker提供k8s的服务。minikube实际也是调用kubeadm,只是简化了kubeadm配置步骤,而且启动的是单节点的k8s服务。二进制文件部署为非docker部署,直接在设备(实体机或虚拟机)上启动服务。经过简单比较准备使用kubeadm部署k8s。

        部署设备为两个虚拟机,操作系统为centos7.6,IP为192.168.220.130和192.168.220.131,其中130作为主节点(master),131作为工作节点(worker/node)。

 

(1)在/etc/yum.repos.d文件夹下新建k8s.repo文件,内容如下
[k8s]
name=k8s
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0

(2)通过yum安装kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl --disableexclude=k8s

(3)通过yum安装docker
--删除可能有冲突的包(之前的docker版本),新环境可不执行
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
--安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
--获取docker的yum repo文件
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
--安装docker组件
yum install -y docker-ce docker-ce-cli containerd.io

(4)关闭操作系统swap使用
执行swapoff -a命令
删除/etc/fstab中swap部分的挂载

(5)配置服务
systemctl enable docker
systemctl start docker
systemctl enable kubelet
kubelet无需启动,启动也会因缺少配置文件报错

kubeadm init命令启动k8s的master节点服务,可以通过命令行配置参数启动、或者将配置参数编辑到配置文件中然后调用配置文件进行启动,两个效果相同。
(6-1)启动k8s主节点服务-方法1
直接用命令+参数方法启动k8s主节点服务,自动下载k8s相关的docker镜像
 kubeadm init --kubernetes-version=1.18.0  \
--apiserver-advertise-address=192.168.220.130   \
--image-repository registry.aliyuncs.com/google_containers  \
--service-cidr=192.168.240.0/24 --pod-network-cidr=192.168.250.0/24

(6-2)启动k8s主节点服务-方法2
使用yaml配置文件启动k8s主节点服务(官方警告:beta版本,后续可能有改动)

k8s1.18.0版本的yaml配置文件api版本为v1beta2,可以参考如下地址
https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta2

如下命令可以查看init的yaml文件样例
kubeadm config print init-defaults

编辑init.yaml文件
apiVersion: kubeadm.k8s.io/v1beta2
kind: ClusterConfiguration
imageRepository: registry.aliyuncs.com/google_containers
kubernetesVersion: v1.18.0
networking: 
  podSubnet: "192.168.250.0/24"

下载k8s相关的docker镜像
kubeadm config images pull --config=init.yaml

启动k8s的master节点服务
kubeadm init --config=init.yaml

(7)k8s主节点服务启动后,会给出提示信息做三个操作,一是为操作系统用户进行k8s配置、二是配置pod网络插件、三是为k8s添加工作节点


(8)为操作系统用户进行k8s配置
mkdir -p /root/.kube
cp -i /etc/kubernetes/admin.conf /root/.kube/config
# chown root:root /root/.kube/config  --如为非root用户配置需注意权限
注意,在k8s主节点使用root用户执行kubectl get nodes时会报错连接被拒绝,进行如下配置后,使用root用户执行kubectl get nodes正常显示

(9)配置pod网络插件
该地址列出可选网络插件

https://kubernetes.io/docs/concepts/cluster-administration/addons/

参考kubeneters权威指南,使用weave插件,使用如下命令配置网络插件
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version|base64|tr -d '\n')"

kubeadm join命令在要设置成工作节点的设备上执行,首先参考步骤1-5安装必要组件,其中第2步中的kubectl可以不安装。kubeadm join与kubeadm init类似,可以通过命令行+参数执行,也可以通过调用配置文件执行。
(10)为k8s添加一个工作节点
使用命令+参数方法为k8s添加一个工作节点,在要设置为k8s工作节点的设备上执行,执行命令可以使用在kubeadm init完主节点后显示的命令(见上面截图)

kubeadm join 192.168.220.130:6443 --token u7bk6v.6fkuky3s8djryssu \
    --discovery-token-ca-cert-hash sha256:c9611039be872d220b6a3e44a7023e197d97440357fe7e033354ecdba927f5cc

如不记得token,查看token命令
kubeadm token list

如不记得ca证书hash,查看ca证书hash命令
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'

如token过期,重新生成token命令,ttl为0时永久有效
kubeadm token create --ttl 0

注意:执行kubeadm join报警告detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd"。参考网址https://kubernetes.io/docs/setup/cri/,执行如下命令,然后重启docker服务。
cat > /etc/docker/daemon.json <<EOF
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}
EOF

注意:执行kubeadm join报警告hostname "ct76-3" could not be reached,/etc/hosts中添加本机hostname与IP对应关系

注意:执行完kubeadm join后,在主节点使用kubectl get nodes查看新加入的节点状态为notready,在新加入的节点执行systemctl status kubelet,发现报错Unable to update cni config: no networks found in /etc/cni/net.d,该问题可能是docker尚未下载完毕对应网络插件的镜像,使用docker images查看网络插件的镜像是否已经下载完毕,如下载完毕,可以执行systemctl restart kubelet命令,再再主节点查看nodes状态。
 

配置完毕状态如下

Logo

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

更多推荐