概述
在本门课程中,我们将会学习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: demolabels:app: demo
spec:replicas: 1selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: demoimage: zhangdapeng520/myhelloports:- 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: demolabels:app: demo
spec:replicas: 1selector:matchLabels:app: demotemplate:metadata:labels:app: demospec:containers:- name: demoimage: zhangdapeng520/myhelloports:- containerPort: 18888
第二步:准备service.yaml配置文件
apiVersion: v1
kind: Service
metadata:name: demolabels:app: demo
spec:ports:- port: 18888protocol: TCPtargetPort: 18888selector:app: demotype: 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