自动化集成:Kubernetes容器引擎详解
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作;本篇文章主要描述Kubernetes引擎用法。

一、基础简介
Kubernetes简称K8S,是一个开源的分布式的容器编排引擎,用来对容器化应用进行自动化部署和管理。

Control-Plane-Components:控制平面组件,对集群做出全局决策,例如:调度、检测和事件响应,可以在集群中的任何节点上运行;
- api:作为K8S控制面的组件,开放K8S的API,相当于控制面的前端;
 - etcd:兼具一致性和高可用性的键值数据库,作为保存K8S数据的后台库;
 - scheduler:监听新建未指定运行节点的Pods,并为Pod选择运行节点;
 - controllermanager:运行控制器进程,逻辑上是一个单独的进程;
 
Node:节点组件:每个节点上运行,维护运行的Pod并提供Kubernetes运行环境;
- kubelet:在每个节点上运行的代理,保证容器都运行在Pod中;
 - kube-proxy:每个节点上运行的网络代理, 维护节点上的网络规则;
 
Container-Runtime:容器运行时,负责运行容器的软件,支持Docker、containerd、CRI-O等多个容器运行环境,以及任何实现Kubernetes-CRI容器运行环境接口。
二、环境配置
1、服务搭建
使用Git拉取k8s-docker-desktop-for-mac仓库,执行load_images.sh脚本,会拉取本地docker对应的k8s版本,注意这里要等到脚本流程执行完毕,可能因为Git连接的问题,耗时较长,下面是脚本拉取的镜像:
docker images
REPOSITORY                           TAG
docker/desktop-kubernetes            kubernetes-v1.21.5-cni-v0.8.5-critools-v1.17.0-debian
k8s.gcr.io/kube-apiserver            v1.21.5
k8s.gcr.io/kube-proxy                v1.21.5
k8s.gcr.io/kube-controller-manager   v1.21.5
k8s.gcr.io/kube-scheduler            v1.21.5
docker/desktop-vpnkit-controller     v2.0
docker/desktop-storage-provisioner   v2.0
k8s.gcr.io/pause                     3.4.1
k8s.gcr.io/coredns/coredns           v1.8.0
k8s.gcr.io/etcd                      3.4.13-0
上述镜像下载完成后,通过docker桌面软件启动k8s即可,这里启动时间相对偏长,启动成功之后界面左下角K8S显示绿色状态:

2、环境查看
# 查看版本:kubectl version
Client Version GitVersion:v1.21.5
Server Version GitVersion:v1.21.5
# 查看集群:kubectl cluster-info
Kubernetes control plane is running at local-host:6443
# 查看节点:kubectl get nodes
NAME             STATUS   ROLES                  AGE   VERSION
docker-desktop   Ready    control-plane,master   23h   v1.21.5
三、部署Docker镜像
1、核心组件
在执行Docker镜像部署之前,首先要理解该流程中几个核心的概念:
- Pod:是可以在Kubernetes中创建和管理的、最小的可部署的计算单元;就Docker概念的术语而言,Pod类似于共享命名空间和文件系统卷的一组Docker容器;
 - ReplicaSet:目的是维护一组在任何时候都处于运行状态的Pod副本的稳定集合;通常用来保证一定数量的、完全相同的Pod的可用性;
 - Deployment:为Pods和ReplicaSets提供声明式的更新能力,可以定义Deployment以创建新的ReplicaSet,或删除现有Deployment;
 - Service:抽象的方式将运行在一组Pods上的应用程序公开为网络服务,在K8S中逻辑上Pods集合与访问策略,这种模式被称为微服务;
 
2、脚本文件
这里将Deployment与Service放在一个.yaml文件中;镜像加载设置imagePullPolicy:Never即本地读取;其中服务发现采用的是NodePort类型,并没有设置具体端口,控制平面会在默认范围内分配一个端口号;

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cloud-app-deployment
  labels:
    app: cloud-app
spec:
  selector:
    matchLabels:
      app: cloud-app
  template:
    metadata:
      labels:
        app: cloud-app
    spec:
      containers:
      - name: cloud-app
        image: Cloud_Url/cicada-image/cloud-app
        imagePullPolicy: Never
        ports:
        - containerPort: 8079
---
apiVersion: v1
kind: Service
metadata:
  name: cloud-app-service
  labels:
    app: cloud-app
spec:
  type: NodePort
  ports:
    - port: 8080
      targetPort: 8079
  selector:
    app: cloud-app
3、资源管理
创建资源
kubectl create -f pod.yaml
查看资源
# 1、查看Pod信息
kubectl get pods -o wide
# 2、查看Service信息
kubectl get svc -o wide
# 3、查看Node信息
kubectl get nodes -o wide
也可以在K8S的Web控制台上,查看资源的可视化界面,下面截图几个脚本中明确声明的资源信息:

删除资源
# 1、通过文件删除
kubectl delete -f pod.yaml
# 2、通过具体资源名删除
kubectl delete pod cloud-app
4、访问资源
# 查看服务的详细描述
kubectl describe svc cloud-app-service
Name:                     cloud-app-service
NodePort:                 <unset>  30930/TCP
Endpoints:                Pod_IP:Pod_端口
这里NodePort端口默认分配30930,当外部访问流量到达Service时,会路由到指定Endpoints(端点),通过上面的资源查看可知,这里Endpoints即Pod的IP与端口;
通过:本机IP:分配端口/API方式,即localhost:30930/client访问到docker容器中应用,也可以在Web界面的Pod模块查看具体的日志输出:

四、控制台组件
Dashboard是基于Web的Kubernetes用户界面,可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源,查看日志等。
1、创建命名空间
kubectl create namespace cm-dev
查看命名空间

2、查看Pod

3、查看Deployment

4、查看Service

同系列推荐:
五、源代码地址
GitEE·地址
https://gitee.com/cicadasmile/butte-auto-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note

自动化集成:Kubernetes容器引擎详解的更多相关文章
- Kubernetes Pod 驱逐详解
		
原文链接:Kubernetes Pod 驱逐详解 在 Kubernetes 中,Pod 使用的资源最重要的是 CPU.内存和磁盘 IO,这些资源可以被分为可压缩资源(CPU)和不可压缩资源(内存,磁盘 ...
 - Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕
		
Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...
 - MyIASM和Innodb引擎详解
		
MyIASM 和 Innodb引擎详解 Innodb引擎 Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别,关于数据库事务与其隔离级别的内容请见数据库事务与其隔离级 ...
 - 自动化运维工具——ansile详解
		
自动化运维工具——ansible详解(一) 目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ...
 - MySQL数据库的各种存储引擎详解
		
原文来自:MySQL数据库的各种存储引擎详解 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB ...
 - 微信小程序flex容器属性详解
		
flex容器属性详解 flex-direction决定元素的排列方向 flex-wrap决定元素如何换行 flex-flow 是 flex-direction 和flex-wrap的简写 justif ...
 - 如何查看mysql数据库的引擎/MySQL数据库引擎详解
		
一般情况下,mysql会默认提供多种存储引擎,你可以通过下面的查看: 看你的mysql现在已提供什么存储引擎:mysql> show engines; 看你的mysql当前默认的存储引擎:mys ...
 - Kubernetes 部署策略详解-转载学习
		
Kubernetes 部署策略详解 参考:https://www.qikqiak.com/post/k8s-deployment-strategies/ 在Kubernetes中有几种不同的方式发布应 ...
 - Zend Studio集成Xdebug断点调试详解
		
转自:http://www.softown.cn/post/115.html Xdebug是PHP开发中两个常用的断点调试工具之一(另一个为Zend Debugger). 现在,我们在Zend Stu ...
 
随机推荐
- shell awk命令字符串拼接
			
本节内容:awk命令实现字符串的拼接 输入文件的内容: TMALL_INVENTORY_30_GROUP my163149.cm6 3506 5683506 mysql-bin.000013 3273 ...
 - java 对 final 关键字 深度理解
			
基础理解 : 1.修饰类 当用final去修饰一个类的时候,表示这个类不能被继承.处于安全,在JDK中,被设计为final类的有String.System等,这些类不能被继承 .注意:被修饰的类的成员 ...
 - sqlserver 各种判断是否存在(表、视图、函数、存储过程等)
			
1.判断表是否存在 select * from sysobjects where id = object_id(表名) and OBJECTPROPERTY(id, N'IsUserTable') = ...
 - Controller返回类的自动识别,WEB-INF,jsp位置
			
Controller: @Controller@RequestMapping("/params")public class ParamsController { @RequestM ...
 - 索引以及Mysql中的索引
			
一.什么是索引 索引是表的目录,会保存在额外的文件中,针对表中的指定列建立,专门用于帮助用户快速查询数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取 ...
 - AI 2021 年度报告
			
建议大伙有空还是自己亲自读一下,虽然有点长,188页ppt. https://docs.google.com/presentation/d/1bwJDRC777rAf00Drthi9yT2c9b0Ma ...
 - PowerDotNet平台化软件架构设计与实现系列(06):定时任务调度平台
			
定时任务是后端系统开发中少不了的一个基本必备技能. 传统的实现定时任务的方式有很多种,比如直接使用操作系统的Timer和TaskSchedule,或者基于Quartz.HangFire.xxl-job ...
 - 访问者模式(Visitor Pattern)——操作复杂对象结构
			
模式概述 在软件开发中,可能会遇到操作复杂对象结构的场景,在该对象结构中存储了多个不同类型的对象信息,而且对同一对象结构中的元素的操作方式并不唯一,可能需要提供多种不同的处理方式,还有可能增加新的处理 ...
 - socket通道
			
一.socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 就是两个进程,跨计算机,他俩需要通讯的话,需要通过网络对接起来.这就是 socket 的作 ...
 - Jmeter——SMTP Sampler发送邮件
			
在平时测试过程中,也会出一些测试报告,那jmeter在不依托其他工具的情况下,可不可以发送邮件呢,自然是可以的. 我们直接使用SMTP Sampler即可. SMTP Sampler参数 我们来添加个 ...