【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

时间:2022-12-24 17:59:09

一、前言

在上一篇,我们基于minikube搭建了一个单节点的k8s集群,作为学习和练习使用的话问题不大,但如果想深入学习和了解k8s的相关技术体系,还是需要搭建真正的集群才能更接近生产环境的应用,本篇将基于KubeAdmin,也是官方推荐的一种方式,实战演示下搭建一个k8s集群的完整过程;

二、环境准备

1、两台(或更多)虚拟机(云服务器),配置:至少2核4G,系统:centos7+;

2、本篇基于阿里云centos7.5的版本进行操作演示;

服务器IP 角色 配置
120.55.XX.42 master 2核4G
120.55.XX.5 node 2核4G

在正式安装k8之前,需要确保当前服务器已经安装了docker

三、安装docker

1、安装yml

在多个机器上均需执行,后文均做如此操作;

yum install -y yum-utils device-mapper-persistent-data lvm2

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

2、配置阿里云镜像

不设置的话,后面拉取镜像的时候可能会比较慢,建议设置一下;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

3、查看当前系统可安装的docker版本

yum list docker-ce --showduplicates | sort -r

4、安装docker

根据上一步的结果选择合适的版本即可

yum -y install docker-ce-20.10.10-3.el7

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

5、设置开机启动

systemctl enable docker.service

6、启动docker服务

systemctl start docker

设置完毕后,可以通过下面的命令检查下docker的状态

systemctl status docker

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

四、k8s搭建步骤

1、配置阿里云镜像源

需要同时在主节点和工作节点执行,在本篇的演示中,我们以左边的os1为主节点,os2为从节点为例进行说明;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

执行下面的命令进行配置

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

2、安装kubelet kubeadm kubectl

该操作在主节点和工作节点均需执行

yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

看到下面的内容,需要耐心的等待一会,毕竟需要从镜像仓库拉取不少安装包

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

3、在主节点执行初始化操作

在主节点执行下面的命令

kubeadm init \
--apiserver-advertise-address=云服务器的内网IP \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

参数说明:

  • --apiserver-advertise-address:主节点的内网ip地址 ;
  • --image-repository 镜像仓库 ;
  • --kubernetes-version k8s版本 ;
  • --service-cidr + --pod-network-cidr 网段不重复即可 ;

apiserver-advertise-address 这里,如果使用的是阿里云服务器,一定要使用内网IP地址,可以在控制台实例看

执行的过程可能毕竟长,需要耐心的等待一会;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

出现下面的界面时候,说明初始化完成;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

需要重点注意圈起来的部分,拷贝出来,再在当前的节点执行一下;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

 执行过程

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

4、将工作节点加入

在上一步初始化工作完成后,我们注意到下面的这一行,意思就是可以将其他节点作为工作节点加入进来即可;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

在另一个节点执行下面的命令

kubeadm join 主节点IP:6443 --token 7f0b62.87iazq6vxo993klg \
    --discovery-token-ca-cert-hash sha256:e27bc6a7024ca69aa7f1f6a9e3718e8590cc00dad5894e607f83419048a9b57f

执行过程

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

 看到下面的结果,说明新的节点加入成功

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

5、查看节点信息

kubectl get nodes

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

从上面展示的节点信息来看,状态还是NotReady的,因为还缺少互相通信的网络插件,接下来需要继续执行相关操作;

6、安装网络插件

kubectl apply -f  https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

再次查看节点状态,这时候发现状态就变成了ready;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

注意,上面的命令只能在master节点,即主节点上执行

查看系统的pod状态

kubectl get pods -n kube-system

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

查看内部组件

kubectl get pod -A

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

到这里,我们基于KubeAdm就初步完成了一个k8s集群的搭建,接下来,将基于这个k8s集群快速部署一个nginx应用;

五、基于k8s搭建nginx服务

需求描述

使用k8s集群部署一个nginx,并可以通过公网IP进行访问

操作步骤

1、创建deployment

deployment是Pod控制器的一种,名称自己定义,nginx镜像版本自行选择;

kubectl create deployment test-nginx --image=nginx:1.23.0

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

2、查看deployment和pod

kubectl get deployment,pod,svc

可以看到上面创建的test-nginx;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

3、暴露80端口

我们知道,nginx默认监听80端口,上面只是创建了nginx对应的deployment(pod),但是外网要访问的话,对于k8s来说,还必须要将其暴露出去才可以;

在上文,通过Minikube搭建的k8s,最后部署nginx时候,只有NodePort 才能被外网访问,接下来需要创建一个Service,类型为NodePort的服务;

kubectl expose deployment test-nginx --port=80 --type=NodePort

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

再次查看pod,svc信息,可以看到就到产生了一个NodePort的service

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

4、浏览器访问测试

在访问之前,如果使用的是阿里云或者腾讯云等云服务器,还需在安全组中将端口开放一下,需要开放的是上述的80:31077中的31077这个端口,然后通过主节点 + 31077即可访问;

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

 由于工作节点同为整个集群中的一个节点,所以也可以通过工作节点  + 端口的方式访问,如下:

【云原生 Kubernetes】基于 KubeAdmin 搭建k8s集群

 5、补充说明

使用Kubeadm部署nginx,暴露端口对外服务,会随机选端口,默认范围是30000~32767,也可以手动修改指定,有兴趣的同学可以继续研究下。