背景介绍

疫情原因,本着不给国家添乱,不出门,在家跟着教程搭建K8s集群环境,在本地的虚拟机上实现,以下是搭建过程,记录下来,方便备查。

知识了解 Kubernetes 简称 K8s 是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能.

第一步、安装Docker

本虚拟机是 CentOS,所以这里选择运用 yum 命令安装软件。安装Docker 执行以下命令。

// 安装 docker
>> yum install docker
// 启动docke
>> systemctl start docker.service
// 查看docker 启动状态
>> systemctl ststus docker
// 开机启动 
>> systemctl enable docker.service
// 查看docker版本
>> docker version

查看Docker 启动状态 在这里插入图片描述

active 表示 docker 启动中

查看 Docker 版本 在这里插入图片描述

第二步、安装etcd

etcd 是高可用的键值key/value存储系统,用于分享配置和服务发现。k8s运行依赖etcd,需要先部署安装etcd。

// 安装
>> yum install etcd -y
// 启动
>> systemctl start etcd
// 关闭
>> systemctl enable etcd
// 查看健康状态
>> etcdctl -C http://localhost:2379 cluster-health

查看 etcd 状态 在这里插入图片描述

第三步、安装K8s

运用yum命令,安装 Kubernetes

// 安装 Kubernetes
>> yum install kubernetes -y

可能出现的安装问题:docker-ce conflicts with 2: 处理方案:之前安装过docker的插件,这里删除docker-ce,再次安装K8s即可。

// 删除 docker-ce
>> yum -y remove docker-ce

1、修改配置 安装成功后,在 etc 下有 kubernetes 安装文件夹。 修改配置文件:找到apiservice文件,vim命令打开,删除KUBE_ADMISSION_CONTROL 配置参数中的 ServiceAccount,即去掉改准入控制器,点击esc切换模式,:wq 保存退出即可。

KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"

2、启动程序 (1) 启动Master主程序

// 启动 kube-apiserver
>> systemctl start kube-apiserver
// 开机启动 kube-apiserver
>> systemctl enable kube-apiserver
// 启动 kube-controller-manager
>> systemctl start kube-controller-manager
// 开机启动 kube-controller-manager
>> systemctl enable kube-controller-manager
// 启动 kube-scheduler
>> systemctl start kube-scheduler
// 开机启动 kube-scheduler
>> systemctl enable kube-scheduler

主程序组件介绍 1) kube-apiserver 提供了k8s各类资源对象(pod,RC,Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和数据中心。 2) Controller Manager 集群内部的管理控制中心,负责集群内的Node、Pod副本、服务端点(Endpoint)、命名空间(Namespace)、服务账号(ServiceAccount)、资源定额(ResourceQuota)的管理,当某个Node意外宕机时,Controller Manager会及时发现并执行自动化修复流程,确保集群始终处于预期的工作状态。 3) kube-scheduler 是 Kubernetes 集群的默认调度器。对每一个新创建的 Pod 或者是未被调度的 Pod,kube-scheduler 会过滤所有的node,然后选择一个最优的 Node 去运行这个 Pod

(2) 启动Node 节点

// 启动 kubelet
>> systemctl start kubelet
// 开机启动 kubelet
>> systemctl enable kubelet
// 启动 kube-proxy
>> systemctl start kube-proxy
// 开机启动 kube-proxy
>> systemctl enable kube-proxy

节点上组件 1) kubelet 是运行在每个节点上的主要的“节点代理”,每个节点都会启动 kubelet进程,用来处理 Master 节点下发到本节点的任务,按照 PodSpec 描述来管理Pod 和其中的容器 2) kube-proxy 负责为Pod创建代理服务,从apiserver获取所有server信息,并根据server信息创建代理服务,实现server到Pod的请求路由和转发,从而实现K8s层级的虚拟转发网络。 顺利执行完以上的命令,K8s集群环境就搭建完成,执行以下命令查看状态。

3、查看集群状态

// 查看集群状态信息
>> kubectl get no

查看集群状态status,这里是就绪 ready,集群环境初步搭建成功。接下来还需要对集群网络进行统一管理,安装flannel。 在这里插入图片描述

第四步、安装flannel

flannel 是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。

// 安装 flannel 
> yum install flannel -y

1、修改配置文件 安装成功后,在 etc/sysconfig 下有 flanneld 。 修改配置文件:找到 flanneld 文件,vim命令打开,添加以下代码

--logtostderr=false 
--log_dir=/var/log/k8s/flannel/ 
--etcd-prefix=/atomic.io/network  
--etcd-endpoints=http://localhost:2379 
--iface=ens33

注:–iface 对应的是网卡名,可通过 ifconfig 命令来查看。 2、修改key

// 修改命令
etcdctl mk /atomic.io/network/config '{ "Network": "10.0.0.0/16" }'  

/atomic.io/network/config 这个 key 与 上文 /etc/sysconfig/flannel 中的配置项 FLANNEL_ETCD_PREFIX 是相对应的,错误的话启动就会出错) Network 是配置网段,不能和物理机 IP 冲突,可以随便定义,尽量避开物理机 IP 段。

3、依次重启服务 启动修改后的 flannel ,并依次重启 docker、k8s。

// 启动 flanneld
systemctl start flanneld
// 重启 docker 
service docker restart
// 重启 kube-apiserver
systemctl restart kube-apiserver
// 重启 kube-controller-manager
systemctl restart kube-controller-manager
// 重启 kube-scheduler
systemctl restart kube-scheduler
// 重启 kube-kubelet
systemctl restart kubelet
// 重启 kube-proxy 
systemctl restart kube-proxy 
第五步、部署程序

1)java 运行程序 部署简单的springboot应用,maven打包jar包,并将其复制到虚拟机。

// 复制命令
scp springbootdemo-0.0.1-SNAPSHOT.jar root@192.168.30.131:/etc/docker/dockerfile

2、编写dockerFile

// 下载java8的镜像
FROM java:8
// 将本地文件挂到到/tmp目录
VOLUME /tmp
// 复制文件到容器
ADD springbootdemo-0.0.1-SNAPSHOT.jar /springbootdemo.jar
// 暴露8080端口
EXPOSE 8080
// 配置启动容器后执行的命令
ENTRYPOINT ["java","-jar","/springbootdemo.jar"]

通过 docker build 命令创建镜像

docker build -t springbootdemo .

. 表示默认使用 “上下文目录(Context)下的名为Dockerfile 的文件作为 Dockerfile”

分五步执行,在本地执行改命令时,受网络影响,重试两次才执行成功。 在这里插入图片描述 查看创建的镜像,便可以看到上传成功的 springbootdemo。

// 查看镜像命令
docker images

在这里插入图片描述 执行完以上操作,初步搭建起分布式应用,下篇博客继续 探索部署SpringBoot 的应用。

博客参考

【1】https://blog.csdn.net/ysk_xh_521/article/details/81668631 【2】https://www.cnblogs.com/zuoyang/p/9639961.html