Ubuntu18.04安装部署k8s(v1.18.0)master节点和node节点

发布于:2022-11-02 ⋅ 阅读:(390) ⋅ 点赞:(0)

耗费了两周的时间,结合好多资料,终于完成了k8s 的安装部署。
k8s依赖于docker,首先要安装docker

docker安装

# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
 
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
 
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

此命令可能会出现如下报错:
在这里插入图片描述
解决方法:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys +数字签名
成功则返回如下:
在这里插入图片描述
之后重新执行 # Step 3 的命令
继续安装

# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update

# Step 5: 查看支持安装的Docker版本
apt-cache madison docker-ce
 
# Step 6: 安装指定版本的docker-ce
sudo apt-get -y install docker-ce=5:19.03.13~3-0~ubuntu-bionic

本次安装的docker不是最新版本,如需要其他版本,看一下Step 5的输出中是否支持,同时也要注意k8s
的版本和docker的版本是否相匹配。

docker配置

sudo vim /etc/docker/daemon.json

打开后输入以下内容:

{
  "exec-opts": [ "native.cgroupdriver=systemd" ]
}

然后:wq保存后重启 docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

然后就可以通过sudo docker info | grep Cgroup来查看修改后的 docker cgroup 状态,发现变为systemd即为修改成功。

下面开始k8s的安装部署。

k8s安装

注:之后的操作需要在root权限中操作

  • 关闭防火墙和虚拟内存
ufw enable
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab
  • 安装kubelet,kubectl,kubeadm
    打开apt源文件:
vim /etc/apt/sources.list

添加如下:

deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main

然后更新apt源:

apt-get update

这一步可能会出现报错,如下:
由于没有公钥,无法验证下列签名: NO_PUBKEY 8B57C5C2836F4BEB
解决方法:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 8B57C5C2836F4BEB
出现如下反馈,即可重新执行更新:
gpg: 合计被处理的数量:1
gpg: 已导入:1

安装kube:

apt-get install -y kubelet=1.18.0-00 kubeadm=1.18.0-00 kubectl=1.18.0-00

我安装的是1.18.0版本,如有其他需要,可自行更换,注意和docker-ce版本的匹配

目前已经完成了k8s的安装,下面将进行k8s的部署了,为了方便,可以把虚拟机进行克隆,当前虚拟机为master,其他为node,克隆后注意修改虚拟机的名称,防止后续和master节点出现冲突,如下:

vim /etc/hosts

修改红线位置,第几个node,就加个数字,方便确认。
在这里插入图片描述

vim /etc/hostname

同上
在这里插入图片描述

下面就开始在部署master节点了,node不需要。

部署master节点

  • 查询需要的镜像:
kubeadm config images list --kubernetes-version v1.18.0

在这里插入图片描述
如果和图中的查询版本一样,可直接执行下面关于镜像的代码,不一样则自行更改版本。
拉取镜像:

docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 

注:可执行 docker images 查看是否拉取成功,后续镜像操作均可执行此代码查看。

给镜像改名:

docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0 k8s.gcr.io/kube-apiserver:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0 k8s.gcr.io/kube-controller-manager:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0 k8s.gcr.io/kube-scheduler:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0 k8s.gcr.io/kube-proxy:v1.18.0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0 k8s.gcr.io/etcd:3.4.3-0
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7 k8s.gcr.io/coredns:1.6.7

删除不需要的镜像:

docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.18.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.18.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.18.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.18.0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.2
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.4.3-0
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.6.7

注:以上三步关于镜像的操作可以直接写到一个脚本里,for循环来执行,详情可以查询脚本操作

  • master初始化:
kubeadm init --image-repository registry.aliyuncs.com/google_containers --kubernetes-version=v1.18.0 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.126.130片

在这里插入图片描述
当出现如下图情况的反馈,则成功。
在这里插入图片描述

在执行kubeadm init时每一次出现报错,需要输入kubeadm reset重置之后再重新进行初始化。
初始化成功后保存圈中的token,其他节点加入时会用到。

若token过期,可手动申请token:

#生成token
kubeadm token generate 
#根据token输出添加命令
kubeadm token create 输出的token --print-join-command --ttl=0  

启动k8s

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

可以设置永久的环境变量,这样下次登陆,kubectl就能直接连上本机的server,而不用再设置一次环境变量:

vim /etc/profile
#文件末尾添加
export KUBECONFIG=/etc/kubernetes/admin.conf
  • 启动kubelet
systemctl enable kubelet
systemctl start kubelet
  • 查看启动状态
root@master-virtual-machine:/home/master# kubectl get nodes
NAME                     STATUS     ROLES    AGE   VERSION
master-virtual-machine   NotReady   master   10m   v1.18.0
#现在只有一个master节点。

root@master-virtual-machine:/home/master# kubectl get cs
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok                  
controller-manager   Healthy   ok                  
etcd-0               Healthy   {"health":"true"}

部署 flannel 网络

  • 生成kube-flannel.yml文件
 vim kube-flannel.yml

输入下面链接中关于 kube-flannel.yml 的内容
https://blog.csdn.net/jcmj123456/article/details/127595438

  • 加载配置文件
root@master:/home/master# kubectl apply -f kube-flannel.yml 
Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
  • 此时状态变为ready
root@master-virtual-machine:/home/master# kubectl get nodes
NAME                     STATUS   ROLES    AGE   VERSION
master-virtual-machine   Ready    master   18h   v1.18.0

如果还是NotReady,建议重启一下虚拟机,再次查看。
重启之后先查看一下状态,若不能查看,可运行代码启动k8s再试一下。

systemctl enable kubelet
systemctl start kubelet

配置 node节点

重新配置node虚拟机,完成docker安装、docker配置、k8s安装
把master节点中保存的命令,在node节点中执行,如下:

 kubeadm join 192.168.126.130:6443 --token 1nl8ga.0cegc3ula4c4i5ki     --discovery-token-ca-cert-hash sha256:9e7e4c96a2dfb1b6ca234bc3b296473b7b86f55e684ff0256ee0524aaa417927

注:每个人的token都不一样,只是举例说明,不要直接复制

若出现报错,一般为token过期,可重新申请token。
还解决不了,就在master节点试试下面的方法。
在这里插入图片描述
node节点别忘了启动kubelet

systemctl enable kubelet
systemctl start kubelet

要不然master节点会出现如下情况:node节点状态为NotReady
在这里插入图片描述

以上是我这两周部署k8s总结的方法,可能整理的不是太好,如有不同意见,可在评论区讨论


网站公告

今日签到

点亮在社区的每一天
去签到