天天看点

【Kubernetes】如何使用Kubeadm部署K8S集群

一 . 准备机器

本次环境采用华为云ECS弹性云服务器部署(也可以使用VMware)

vm01(2V4G): Ubuntu_18.04作为K8S master节点

vm02(1V1G): Ubuntu_18.04作为K8S node节点

备注: 以下所有操作都是在root用户下执行

二 . 在master节点安装k8s和Docker

1.安装需要的包

由于apt 源使用 HTTPS 以确保软件下载过程中不被篡改。因此,我们首先需要添加使用 HTTPS 传输的软件包以及 CA 证书

sudo apt install apt-transport-https ca-certificates software-properties-common curl

【Kubernetes】如何使用Kubeadm部署K8S集群

2.添加 谷歌GPG 密钥

执行

curl -s https://mirrors.huaweicloud.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

【Kubernetes】如何使用Kubeadm部署K8S集群

从华为云开源镜像网站获取安装

3.安装docker 和kubeadm

首先我们修改一下Docker的镜像源,这里我们使用中科大USTC镜像源

echo “deb https://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main” \ > /etc/apt/sources.list.d/kubernetes.list

【Kubernetes】如何使用Kubeadm部署K8S集群

apt-get update ——安装docker

【Kubernetes】如何使用Kubeadm部署K8S集群

apt-get install -y docker.io kubeadm ——安装kubeadm

【Kubernetes】如何使用Kubeadm部署K8S集群

在上述安装 kubeadm 的过程中,docker 和kubeadm、 kubelet、kubectl 工具都会被自动安装好。

4.设置开机自启动并启动 Docker(后默认已设置自启动,可忽略)

systemctl enable docker

systemctl start docker

5.执行 kubeadm init 自动化安装kubernets

【Kubernetes】如何使用Kubeadm部署K8S集群

发现这7个k8s.gcr.io的镜像包无法获取。这就遇到了部署K8S最大的难题就是镜像下载,由于是国内机器, 如果不进行科学上网在国内很难从k8s.gcr.io等镜像源里下载镜像。

这种情况下我们可以 直接指定国内镜像代理仓库(如阿里云代理仓库)进行镜像拉取下载, 成功拉取代理仓库中的镜像后,再将其tag打标签成为k8s.gcr.io对应镜像,最后再删除从代理仓库中拉取下来的镜像,前提要确保imagePullPolicy策略是IfNotPresent,即本地有镜像则使用本地镜像,不拉取!或者将下载的镜像放到私有仓库里,然后将image下载源指向私仓地址。

因为不同的K8S版本需要的镜像包不一样,我们可以使用

kubeadm config images list 命令查询一下kubeadm所需的k8s镜像包版本

【Kubernetes】如何使用Kubeadm部署K8S集群

我们使用 docker pull 拉取所需镜像包(这里指定一下镜像源)

例:docker pull registry.aliyuncs.com/google_containers/coredns:1.7.0

docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0

【Kubernetes】如何使用Kubeadm部署K8S集群

然后打tag,并删除之前从代理仓库下载的镜像

例:docker tag registry.aliyuncs.com/google_containers/coredns:1.7.0

【Kubernetes】如何使用Kubeadm部署K8S集群

docker rmi 镜像名称 ——删除pull下来的额镜像

例:docker rmi registry.aliyuncs.com/google_containers/etcd:3.4.13-0

【Kubernetes】如何使用Kubeadm部署K8S集群
【Kubernetes】如何使用Kubeadm部署K8S集群

然后再执行 kubeadm init 就可以了

【Kubernetes】如何使用Kubeadm部署K8S集群

执行完成后k8s即安装完成,最后会输出kubeadm join那段命令,这个是node节点加入集群必须执行的命令。但是kubeadm init自动生成的token有效期只有24小时。

kubeadm join 192.168.0.3:6443 --token 9dimd4.cte6oheldr8p7ecq

–discovery-token-ca-cert-hash sha256:aad7cddf4764b9a576d315096c24059de53486f187a9135c8067268aa7167403

【Kubernetes】如何使用Kubeadm部署K8S集群

当然我们也可以使用

kubeadm token create --ttl 0

生成一个永不过期的 token(olt9w7.6yew4d24q40n5raa),后续node节点加入集群是要用到。

【Kubernetes】如何使用Kubeadm部署K8S集群

执行

kubectl get nodes

【Kubernetes】如何使用Kubeadm部署K8S集群

发现报错了,第一次使用k8s需要执行下面命令配置kubect所需文件。

执行下面命令:

mkdir -p $HOME/.kube

cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

chown ( i d − u ) : (id -u): (id−u):(id -g) H O M E / . k u b e / c o n f i g 再 次 执 行 k u b e c t l g e t n o d e s 就 行 了 ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20210128105702748. p n g ) 可 以 发 现 当 前 节 点 状 态 N o t R e a d y 状 态 使 用 下 面 命 令 查 看 k u b e l e t 日 志 , 看 到 网 络 插 件 没 有 安 装 j o u r n a l c t l − f − u k u b e l e t ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 2021012810571023. p n g ) 执 行 下 面 命 令 安 装 w e a v e 插 件 k u b e c t l a p p l y − f h t t p s : / / c l o u d . w e a v e . w o r k s / k 8 s / n e t ? k 8 s − v e r s i o n = HOME/.kube/config 再次执行kubectl get nodes 就行了 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128105702748.png) 可以发现当前节点状态NotReady状态 使用下面命令查看kubelet日志,看到网络插件没有安装 journalctl -f -u kubelet ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021012810571023.png) 执行下面命令安装weave插件 kubectl apply -f https://cloud.weave.works/k8s/net?k8s-version= HOME/.kube/config再次执行kubectlgetnodes就行了![在这里插入图片描述](https://img−blog.csdnimg.cn/20210128105702748.png)可以发现当前节点状态NotReady状态使用下面命令查看kubelet日志,看到网络插件没有安装journalctl−f−ukubelet![在这里插入图片描述](https://img−blog.csdnimg.cn/2021012810571023.png)执行下面命令安装weave插件kubectlapply−fhttps://cloud.weave.works/k8s/net?k8s−version=(kubectl version | base64 | tr -d ‘\n’)

【Kubernetes】如何使用Kubeadm部署K8S集群
【Kubernetes】如何使用Kubeadm部署K8S集群

看到节点已经正常了。master节点已经安装完成。

三. node节点加入集群

1、登陆vm02,node节点虚拟机,参考前面步骤1 2 3 4,安装kubeadm和docker 但是不执行kubeadm init

2 、然后需要下载kube-proxy pause镜像(同上,先拉取镜像再修改tag)

docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2

docker pull registry.aliyuncs.com/google_containers/pause:3.2

docker tag registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2 k8s.gcr.io/kube-proxy:v1.20.2

docker tag registry.aliyuncs.com/google_containers/pause:3.2 k8s.gcr.io/pause:3.2

docker rmi registry.aliyuncs.com/google_containers/kube-proxy:v1.20.2

docker rmi registry.aliyuncs.com/google_containers/pause:3.2

【Kubernetes】如何使用Kubeadm部署K8S集群

3 、执行kubeadm join命令加入集群(join命令是master安装时生成的)

这里token换成永久的token

kubeadm join 192.168.0.3:6443 --token 9dimd4.cte6oheldr8p7ecq

–discovery-token-ca-cert-hash sha256:aad7cddf4764b9a576d315096c24059de53486f187a9135c8067268aa7167403

4、安装weave网络插件

这里要用到kubectl命令,但是node节点不是master 无法执行。所以按照下面命令,admin.conf文件从master主机拷贝到node节点。
           

mkdir -p $HOME/.kube

scp {masterip}:/etc/kubernetes/admin.conf $HOME/.kube/config

chown ( i d − u ) : (id -u): (id−u):(id -g) H O M E / . k u b e / c o n f i g ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20210128105741678. p n g ) 安 装 w e a v e : k u b e c t l a p p l y − f " h t t p s : / / c l o u d . w e a v e . w o r k s / k 8 s / n e t ? k 8 s − v e r s i o n = HOME/.kube/config ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210128105741678.png) 安装weave: kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version= HOME/.kube/config![在这里插入图片描述](https://img−blog.csdnimg.cn/20210128105741678.png)安装weave:kubectlapply−f"https://cloud.weave.works/k8s/net?k8s−version=(kubectl version | base64 | tr -d ‘\n’)"

5、查看node节点状态,部署完成。

【Kubernetes】如何使用Kubeadm部署K8S集群
【Kubernetes】如何使用Kubeadm部署K8S集群