初探Kubernetes+Docker 分布式应用部署(上)
搭建K8s集群环境
文章目录
疫情原因,本着不给国家添乱,不出门,在家跟着教程搭建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
更多推荐
所有评论(0)