一、前言
在上一篇,我们基于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
2、配置阿里云镜像
不设置的话,后面拉取镜像的时候可能会比较慢,建议设置一下;
3、查看当前系统可安装的docker版本
yum list docker-ce --showduplicates | sort -r
4、安装docker
根据上一步的结果选择合适的版本即可
yum -y install docker-ce-20.10.10-3.el7
5、设置开机启动
systemctl enable docker.service
6、启动docker服务
systemctl start docker
设置完毕后,可以通过下面的命令检查下docker的状态
systemctl status docker
四、k8s搭建步骤
1、配置阿里云镜像源
需要同时在主节点和工作节点执行,在本篇的演示中,我们以左边的os1为主节点,os2为从节点为例进行说明;
执行下面的命令进行配置
-
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
2、安装kubelet kubeadm kubectl
该操作在主节点和工作节点均需执行
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
看到下面的内容,需要耐心的等待一会,毕竟需要从镜像仓库拉取不少安装包
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地址,可以在控制台实例看
执行的过程可能毕竟长,需要耐心的等待一会;
出现下面的界面时候,说明初始化完成;
需要重点注意圈起来的部分,拷贝出来,再在当前的节点执行一下;
执行过程
4、将工作节点加入
在上一步初始化工作完成后,我们注意到下面的这一行,意思就是可以将其他节点作为工作节点加入进来即可;
在另一个节点执行下面的命令
-
kubeadm
join 主节点IP:6443 --token 7f0b62.87iazq6vxo993klg \
-
--discovery-token-ca-cert-hash sha256:e27bc6a7024ca69aa7f1f6a9e3718e8590cc00dad5894e607f83419048a9b57f
执行过程
看到下面的结果,说明新的节点加入成功
5、查看节点信息
kubectl get nodes
从上面展示的节点信息来看,状态还是NotReady的,因为还缺少互相通信的网络插件,接下来需要继续执行相关操作;
6、安装网络插件
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
再次查看节点状态,这时候发现状态就变成了ready;
注意,上面的命令只能在master节点,即主节点上执行
查看系统的pod状态
kubectl get pods -n kube-system
查看内部组件
kubectl get pod -A
到这里,我们基于KubeAdm就初步完成了一个k8s集群的搭建,接下来,将基于这个k8s集群快速部署一个nginx应用;
五、基于k8s搭建nginx服务
需求描述
使用k8s集群部署一个nginx,并可以通过公网IP进行访问
操作步骤
1、创建deployment
deployment是Pod控制器的一种,名称自己定义,nginx镜像版本自行选择;
kubectl create deployment test-nginx --image=nginx:1.23.0
2、查看deployment和pod
kubectl get deployment,pod,svc
可以看到上面创建的test-nginx;
3、暴露80端口
我们知道,nginx默认监听80端口,上面只是创建了nginx对应的deployment(pod),但是外网要访问的话,对于k8s来说,还必须要将其暴露出去才可以;
在上文,通过Minikube搭建的k8s,最后部署nginx时候,只有NodePort 才能被外网访问,接下来需要创建一个Service,类型为NodePort的服务;
kubectl expose deployment test-nginx --port=80 --type=NodePort
再次查看pod,svc信息,可以看到就到产生了一个NodePort的service
4、浏览器访问测试
在访问之前,如果使用的是阿里云或者腾讯云等云服务器,还需在安全组中将端口开放一下,需要开放的是上述的80:31077中的31077这个端口,然后通过主节点 + 31077即可访问;
由于工作节点同为整个集群中的一个节点,所以也可以通过工作节点 + 端口的方式访问,如下:
5、补充说明
使用Kubeadm部署nginx,暴露端口对外服务,会随机选端口,默认范围是30000~32767,也可以手动修改指定,有兴趣的同学可以继续研究下。
转载:https://blog.csdn.net/zhangcongyi420/article/details/128377757