自动化集成:Kubernetes容器引擎详解

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Kubernetes简称K8S,是一个开源的分布式的容器编排引擎,用来对容器化应用进行自动化部署和管理,让部署容器化的应用简单并且高效,支持自动化部署、大规模可伸缩、应用容器化管理。
前言:该系列文章,围绕持续集成:Jenkins+Docker+K8S相关组件,实现自动化管理源码编译、打包、镜像构建、部署等操作; 本篇文章主要描述Kubernetes引擎用法

00-0.png

一、基础简介

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

05-1.png

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显示绿色状态:

05-2.png

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类型,并没有设置具体端口,控制平面会在默认范围内分配一个端口号;

05-3.png

---
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控制台上,查看资源的可视化界面,下面截图几个脚本中明确声明的资源信息:

05-4.png

删除资源

# 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模块查看具体的日志输出:

05-5.png

四、控制台组件

Dashboard是基于Web的Kubernetes用户界面,可以使用Dashboard将容器应用部署到Kubernetes集群中,也可以对容器应用排错,还能管理集群资源,查看日志等。

1、创建命名空间

kubectl create namespace cm-dev

查看命名空间

05-6.png

2、查看Pod

05-7.png

3、查看Deployment

05-8.png

4、查看Service

05-9.png

五、源代码地址

GitEE·地址
https://gitee.com/cicadasmile/butte-auto-parent
Wiki·地址
https://gitee.com/cicadasmile/butte-java-note
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
敏捷开发 jenkins Devops
探索软件测试的新篇章:自动化与持续集成的融合之道
【9月更文挑战第31天】 在软件开发的海洋中,测试是确保航船稳健前行的灯塔。本文将引领读者驶入软件测试的新纪元,探索自动化测试和持续集成如何携手共创高效、可靠的开发流程。我们将从基础概念出发,逐步深入到实际操作层面,揭示这一现代软件开发模式的核心价值和实现路径。你将看到,通过代码示例和实践案例,如何将理论转化为提升软件质量的具体行动。
|
17天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现之旅
本文旨在通过一个实际案例,向读者展示如何将DevOps理念融入日常工作中,实现自动化部署和持续集成。我们将从DevOps的基础概念出发,逐步深入到工具的选择、环境的搭建,以及流程的优化,最终实现一个简单而高效的自动化部署流程。文章不仅提供代码示例,更注重于实践中的思考和问题解决,帮助团队提高软件开发和运维的效率。
|
19天前
|
监控 测试技术 持续交付
自动化和持续集成在软件开发中各自扮演什么角色
自动化和持续集成在软件开发中各自扮演什么角色
|
19天前
|
监控 安全 测试技术
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
在实施自动化和持续集成的过程中,如何确保代码的安全性和合规性
|
1月前
|
Kubernetes 持续交付 开发者
探索并实践Kubernetes集群管理与自动化部署
探索并实践Kubernetes集群管理与自动化部署
59 4
|
10天前
|
运维 监控 Devops
DevOps实践:自动化部署与持续集成的融合之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为一种文化和实践,它倡导开发(Dev)与运维(Ops)之间的协作与整合。本文将引导读者了解如何通过自动化部署和持续集成(CI)的实践来提升软件交付的速度和质量。我们将探讨一些实用的工具和技术,以及它们是如何帮助团队高效地管理代码变更、测试和部署的。文章将不包含代码示例,但会详细解释概念和流程,确保内容的通俗易懂和条理性。
114 62
|
10天前
|
运维 监控 Devops
DevOps实践:持续集成与部署的自动化之旅
【10月更文挑战第7天】在软件开发领域,DevOps已成为提升效率、加速交付和确保质量的关键策略。本文将深入探讨如何通过实施持续集成(CI)和持续部署(CD)来自动化开发流程,从而优化运维工作。我们将从基础概念入手,逐步过渡到实际操作,包括工具选择、流程设计以及监控和反馈机制的建立。最终,我们不仅会展示如何实现这一自动化流程,还会讨论如何克服常见的挑战,以确保成功实施。
49 9
|
9天前
|
缓存 监控 测试技术
掌握容器化持续集成/持续部署(CI/CD)的最佳实践
【10月更文挑战第8天】本文介绍了容器化持续集成/持续部署(CI/CD)的最佳实践,涵盖容器化CI/CD的概念、优势和实施步骤。通过使用容器技术,可以实现环境一致性、快速迭代和易于扩展,提高软件开发的效率和可靠性。文章还详细讨论了编写高效的Dockerfile、自动化测试、安全性、监控和日志管理等方面的最佳实践。
|
20天前
|
运维 Devops jenkins
DevOps实践:自动化部署与持续集成的实现
【9月更文挑战第36天】本文通过深入浅出的方式,向读者展示了在现代软件开发中,DevOps如何通过自动化部署和持续集成提高开发效率和软件质量。文章不仅介绍了相关概念,还提供了实用的代码示例,帮助读者理解如何在实际工作中应用这些技术。
|
19天前
|
机器人 jenkins 测试技术
自动化与持续集成
自动化与持续集成

相关产品

  • 容器服务Kubernetes版