概述

在本门课程中,我们将会学习K8S一些非常重要和核心概念,已经操作这些核心概念对应组件的相关命令和方式。比如Deploy部署,Pod容器,调度器,Service服务,Node集群节点,Helm包管理器等等。
在学习本门课之前,同学应该具备一定的Linux、Docker、K8S的基础知识。

我目前已经发布的关于云原生的课程如下:
在这里插入图片描述

如果你没有Linux的基础知识,推荐你学习我的《零基础使用VMWare快速搭建Linux开发环境》,该课程的目录结构如下:
在这里插入图片描述

如果你还没有K8S的基础环境,推荐你学习我的《Ubuntu22和Minikube搭建K8S环境》,该课程的目录结构如下:
在这里插入图片描述

如果你还没有Docker和K8S的基础知识,推荐你学习我的《使用K8S部署Go语言开发的Web应用》,该课程的目录结构如下:
在这里插入图片描述

如果你都需要学习,那么我的推荐学习顺序是:

  • 1、《零基础使用VMWare快速搭建Linux开发环境》
  • 2、《Ubuntu22和Minikube搭建K8S环境》
  • 3、《使用K8S部署Go语言开发的Web应用》

要学习本门课程,至少需要拥有自己的K8S环境,否则,课程中相关的命令和操作,只能作为了解,而没有办法进行实操,学习的效果会稍微偏低。

本课程作为K8S的零基础体系课程之一,用来了解K8S的核心组件和核心概念,学习K8S的基础知识有非常重要的学习价值。
下面,就让我带着同学们一起去探索美妙的云原生世界吧!

部署清单

配置文件

部署清单指的是用来记录要部署的应用程序的一个YAML文件的配置信息,比如我们要部署的myhello的应用程序的部署清单如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  labels:
    app: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: zhangdapeng520/myhello
          ports:
            - containerPort: 18888

根据配置文件部署

执行命令:

kubectl apply -f deploy.yaml

查看部署的容器:

kubectl get pods --selector app=demo

根据配置文件删除:

kubectl delete -f deploy.yaml

Deploy部署

在《使用K8S部署Go语言开发的Web应用》课程中,我们的容器镜像已经能够在K8S集群中运行并访问了,但是它究竟是怎么工作的呢?
kubectl run 命令会创建Deploy部署,也就是我们接下来要介绍的重要的Kubernetes资源。

监督与调度

Deploy部署会记录一些关于部署镜像的基本信息,包括:

  • 镜像的名称
  • 要运行的副本数量
  • 启动容器需要的其他信息

重新启动容器

Deploy部署有一个非常重要的功能,那就是重新启动容器。根据配置的副本数量,如果K8S集群中的容器多了,则停止一些,如果少了则增加一些,这个功能非常的灵活和强大。

查询部署

查询Deploy部署:

kubectl get deployments

查看详细信息:

kubectl describe deployments/demo

协调循环

Kubernetes控制器会不断根据集群的实际状态检查每个资源的所需状态,并自动进行调整。比如第一次创建demo部署时,没有运行任何demo的Pod,此时K8S会自动启动所需的Pod。如果这个Pod停止,只要Deploy部署仍然存在,K8S就会再次启动它。

第一步:检查Pod是否在运行

kubectl get pods --selector app=demo

第二步:停止Pod

kubectl delete pods --selector app=demo

第三步:再次查看Pod。此时就会发现有两个Pod,原来的被关闭了,新的那个因为有Deploy,所以被自动创建了。这就是协调循环在工作。

kubectl get pods --selector app=demo

第四步:最后,通过以下命令关闭并清理资源

kubectl delete all --selector app=demo

Service服务

K8S中的Service服务,类似于一种Web代理或者负载均衡器,负责将请求转发大奥一组后端的Pod上。但是需要注意的是,Service不止能够用于Web端口,还能够将流量从任意端口转发到其他端口。
我们之前部署的Go开发的Web程序,正常情况下是无法被外部访问到的,我们通过配置Service的端口,能够实现被外部访问。通过以下的实验,我们来深入的了解以下Service服务。

第一步:准备deploy.yaml配置文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
  labels:
    app: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: demo
          image: zhangdapeng520/myhello
          ports:
          - containerPort: 18888

第二步:准备service.yaml配置文件

apiVersion: v1
kind: Service
metadata:
  name: demo
  labels:
    app: demo
spec:
  ports:
  - port: 18888
    protocol: TCP
    targetPort: 18888
  selector:
    app: demo
  type: ClusterIP

第三步:部署Deploy资源

kubectl apply -f deploy.yaml

第四步:部署Service资源

kubectl apply -f service.yaml

第五步:端口转发

kubectl port-forward service/demo 9999:18888

第六步:浏览器访问 http://localhost:9999
第七步:删除资源

kubectl delete -f service.yaml
kubectl delete -f deploy.yaml

查看K8S集群中的节点

kubectl get nodes

副本数量

通过配置K8S中容器的副本数量,我们能够很轻松的实现容器的扩容,下面我们来做一个实验学习一下修改副本数量的用法。

第一步:将deploy.yaml中的副本数量改为3

spec:
  replicas: 3

第二步:部署

kubectl apply -f deploy.yaml

第三步:查看pod

kubectl get pods --selector=app

第四步:将deploy.yaml中的副本数量改为1

spec:
  replicas: 1

第五步:再次部署

kubectl apply -f deploy.yaml

第六步:再次查看pod

kubectl get pods --selector=app

第七步:清理资源

kubectl delete -f deploy.yaml
点击阅读全文
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐