本文介绍: 讲述kubernetesdocker是什么,有什么区别。一些常见的命令及某些配置的含义

一、kubernetes及Docker相关介绍

1、kubernetes是什么

1-1、简称为k8skube,是一个可移植、可扩展开源平台用于管理容器化的工作负载服务,可促进声明配置自动化
声明配置语法kubectl create/apply/delete -f xxxx.yaml/json

1-2、k8s是谷歌推出的业界最受欢迎的容器编排工具之一,由谷歌开源。它提供了广泛的功能,包括自动化部署自动伸缩、负载均衡、自愈性和强大的配置管理生态系统庞大,拥有大量的插件工具,适用于复杂的容器应用场景

自动化部署: 将容器应用程序部署到容器运行环境中,无需手动干预。
伸缩性: 根据需求扩展或收缩容器实例,以适应流量负载的变化。
负载均衡: 在多个容器实例之间分配流量,以确保高可用性性能
自愈性: 检测自动处理容器故障,以确保应用程序的稳定性。
配置管理管理容器的配置,包括环境变量密钥证书等。

常见的容器编排器有

1-3、应用部署升级过程

容器的一些优点:
敏捷应用程序的创建和部署:与使用 VM 镜像相比,提高了容器镜像创建的简便性和效率。
持续开发集成和部署:通过快速简单回滚(由于镜像可变性), 提供可靠且频繁的容器镜像构建和部署。
关注开发运维的分离:在构建发布时创建应用程序容器镜像,而不是在部署时, 从而将应用程序与基础架构分离。
可观察性:不仅可以显示 OS 级别信息指标,还可以显示应用程序的运行状况和其他指标信号
跨开发、测试和生产的环境一致性:在笔记计算机上也可以和在云中运行一样的应用程序。
跨云和操作系统发行版本可移植性:可在Ubuntu、RHEL、CoreOS、本地、 Google Kubernetes Engine 和其他任何地方运行。
以应用程序为中心的管理:提高抽象级别,从在虚拟硬件上运行 OS 到使用逻辑资源在 OS 上运行应用程序。
松散耦合、分布式弹性、解放的微服务:应用程序被分解成较小的独立部分, 并且可以动态部署和管理 – 而不是在一台大型单机上整体运行。
资源隔离:可预测的应用程序性能
资源利用:高效率和高密度

2、什么是Docker

2-1、Docker是一种开源的容器化技术可以将应用程序及其依赖打包一个可移植的容器中然后发布到任何流行的Linux、Windows虚拟机中。容器是完全使用沙箱机制隔离,相互之前不会有任何接口

2-2、Docker几个核心概念

2-3、Docker运行容器

2-4、Docker与虚拟机区别与联系

# 选项
  -t - 提到镜像的标签。
  ImageName - 这是您要为镜像指定名称。
  TagName - 这是您要为镜像指定标签dir - Dockerfile所在的目录,“.”表示当前目录# 示例
docker build -t demo-boot:1.0.0 -f Dockerfile .
   option	               作用   
    -a, --all	           显示全部容器(默认显示运行中的容器)   
    -f, --filter filter   根据提供的 filter 过滤输出   
    -n, --last int	       列出最近创建的 n 个容器(默认-1,代表全部)
    -l, --latest	       显示最近创建的容器(包括所有状态的容器)
    -s, --size 	       显示总的文件大小   
    --no-trunc	           显示完整的镜像 ID   
    -q, --quiet 	       静默模式,只显示容器 ID
  • 删除容器:docker rm 容器ID
  • 运行容器:docker run [OPTIONS] IMAGE [COMMAND] [ARG…]。
option	                 作用
-d		                 守护进程后台运行该容器
-v						 目录映射,容器目录挂载宿主机目录,格式<host目录>:<容器目录>
-p		                 指定端口映射格式主机(宿主)端口:容器端口
--namenginx-lb”        容器名字

2-6、Docker的那些端口含义

3、k8s和docker的区别与联系

3-1、k8s是一种开源的容器集群管理系统,而docker是一种开源的应用容器引擎

3-2、k8s是一套自动化部署工具,可以管理docker容器是容器编排层面的;docker是容器化技术,是容器层面的。 所以说Docker解决了应用程序的容器化问题,而k8s则负责容器容器的自动化管理和编排。这两者相辅相成。

3-3、k8s+docker+Jenkins自动化部署,如下图引用掘金平台图片

在这里插入图片描述

4、什么是容器、容器引擎、容器编排

4-1、容器:是一个视图隔离、资源可限制独立文件系统进程集合。所谓“视图隔离”就是能够看到部分进程以及具有独立的主机名等;控制资源使用率则是可以对于内存大小以及CPU使用个数等进行限制。容器就是一个进程集合,他将系统的其他资源隔离开来,具有自己的独立资源视图

4-2、容器引擎:是一种虚拟化技术,利用操作系统内核来实现对应用程序的隔离和打包,使得应用程序可以在不同的环境中运行,而不需要修改代码

4-3、容器编排:是指自动化容器应用的部署、管理、扩展联网的一些列管控操作、能够控制自动化许多任务、包括调度和部署容器、在容器之间分配资源、扩缩容器应用规模、在主机不可用或资源不足时将容器从一台主机迁移到其他主机、负载均衡以及监视容器和主机运行状况等。

5、k8s中service的各端口含义

注:参考nginx-svc.yaml配置,如下

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc ## svc名称对应 kubectl get svcname
  namespace: ns-test ## 命名空间没有可以删除,默认是default
spec:
  selector:
    app: nginx ## 关联容器标签
  ports:
  - port: 8000 ## 集群间接口:集群内部服务之间访问service的入口
    targetPort: 80 ## 程序端口:容器内部端口号
    nodePort: 30001 ## nodeport映射为30001端口,便于外部主机访问
  type: NodePort ## svc类型nodeport

5-1、nodePort

5-2、port

5-3、targetPort

5-4、containerPort

5-5、总结

在这里插入图片描述

6、k8s的yaml主要配置说明

# Deployment.yaml的配置
apiVersion: apps/v1 		#指定api版本标签
kind: Deployment    		#定义资源的类型/角色deployment为副本控制器,此处资源类型可以是Deployment、Ingress、Service等
metadata:      				#定义资源的元数据信息比如资源的名称namespace标签等信息
  name: nginx-deployment  	#定义资源的名称,在同一个namespace空间中必须是唯一
  labels:				  	#定义Deployment资源标签
    app: nginx    
spec:    	   				#定义deployment资源需要的参数属性,诸如是否在容器失败时重新启动容器的属性
  replicas: 3  				#定义副本数量
  selector:    				#定义标签选择器
    matchLabels:  			#定义匹配标签
      app: nginx 		 	#需与 .spec.template.metadata.labels 定义的标签保持一致
  template:       			#定义业务模板,如果有多个副本,所有副本属性会按照模板相关配置进行匹配
    metadata:
      labels:     			#定义Pod副本将使用的标签,需与 .spec.selector.matchLabels 定义的标签保持一致
        app: nginx
    spec:
      containers:           #定义容器属性
      - name: nginx         #定义一个容器名,一个 - name: 定义一个容器
        image: nginx:1.20   #定义容器使用的镜像以及版本
        ports:
        - containerPort: 80 #定义容器的对外的端口

# Service.yaml的配置
apiVersion: v1
kind: Service
metadata:					#元数据
  name: string				#Service名称
  namespace: string			#命名空间,不指定时默认为default命名空间
  labels:					#自定义标签属性列表     
    - name: string		
spec:						#详细描述    
  selector: []				#这里选择器一定要选择容器的标签,也就是pod的标签
  type: string				#service的类型,指定service的访问方式,默认ClusterIP
  clusterIP: string			#虚拟服务IP地址,当type=ClusterIP时,如不指定系统自动分配,也可手动指定。当type=loadBalancer,需要指定
  sessionAffinity: string	#是否支持session可选值为ClietIP,默认值为空
							#ClientIP表示将同一个客户端(根据客户端IP地址决定)的访问请求转发到同一个后端Pod
  ports:					#service需要暴露的端口列表    
  - name: string			#端口名称
    protocol: string		#端口协议支持TCP或UDP,默认TCP
     port: int				#服务监听端口号
     targetPort: int		#需要转发到后端的端口号(要于containerPort对应
     nodePort: int			#当type=NodePort时,指定映射到物理机的端口号
  status:					#当type=LoadBalancer时,设置外部负载均衡地址,用于公有云环境    
    loadBalancer:			#外部负载均衡器    
      ingress:				#外部负载均衡器 
      ip: string			#外部负载均衡器的IP地址
      hostname: string		#外部负载均衡器的机主机

6-1、apiVersion: v1或apps/v1

6-2、kind:Pod、Deployment、Service、ReplicaSet、ReplicationController等

  • Pod:是k8s中最小资源管理组件,一个Pod相当于docker中的一个容器。
  • Deployment:是Pod的控制器,维持Pod的数量。部署容器一般就用它。即:kind:Deployment
  • Service:当Pod重新生成时,其容器IP等状态信息可能会变动,而Service会根据Pod的Label标签对这些状态信息进行监控和变更,保证上下游服务不受Pod的变动影响
  • ReplicaSet:目的是维护一组在任何时候都处于运行状态的 Pod 副本的稳定集合。 因此,它通常用来保证给定数量的、完全相同的Pod 的可用性
  • ReplicationController: 确保在任何时候都有特定数量的 Pod 副本处于运行状态。 即:确保一个 Pod 或一组同类的Pod 总是可用的。(推荐使用配置 ReplicaSet 的 Deployment 来建立副本管理机制)。

6-3、 – name 或- port等,表明是一组集合中的一个实例配置

- port: 443
  targetPort: 8443
- port: 442
  targetPort: 8442

7、什么是Pod

8、Pod与Docker创建容器对比

  • 创建容器使用docker,1个docker对应一个容器,一个容器对应1个进程,一个容器运行一个程序。一个docker也可以创建多个容器,但是不好管理,因为docker是单进程的。

  • Pod是多进程设计,可以运行多个应用程序(容器),一个Pod中可以有多个容器,一个容器中运行一个应用程序。

  • Pod创建容器的优点:① 两个应用之间进行交互更加方便;② 网络之间调用可以直接通过127.0.0.1,不需要通过ip调用;③ 两个应用之间需要频繁调用
    在这里插入图片描述

9、Pod实现机制

9-1、共享网络

        实现原理:创建Pod时,首先会在Pod中创建一个pause根容器,也成为info容器,然后创建其它业务容器,每创建一个业务容器,都会加入到根容器中,让所有的业务容器在同一个namespace下,只要在同一个namespace下那么所有容器共享ip、port。
在这里插入图片描述

9-2、共享存储

        Volume是容器中的一种存储方式,可以被认为是容器内的一个目录。Volume可以在容器内部挂载并用于存储数据,包括应用程序的数据、配置文件日志等。k8s支持多种类型的Volume,每种类型的用途和特点如下
① EmptyDir:在容器中创建空目录,用于临时存储数据,当Pod被删除时,数据也会被删除
② HostPath:使用节点上的文件系统作为Volume,在容器中挂载节点上的目录或文件,可以实现数据持久化存储。
③ ConfigMap:将配置文件作为Volume挂载到容器中,可以通过ConfigMap管理容器的配置信息
④ Secret:将敏感数据(如密码证书等)作为Volume挂载到容器中,可以通过Secret管理容器的敏感数据
在这里插入图片描述

9-3、资源限制

        Pod在进行资源调度时,可以对调度的资源大小进行限制,例如:我们限制Pod调度是使用的资源大小为:2C4G(即:2核CPU、4G内存),那么调度对应的node节点时,只会占用对应的资源,对于不满足资源的节点,将不会进行调度。
在这里插入图片描述

10、k8s常用命令

  # 运行pod
  # 模板:kubectl run 控制器名称 --image=镜像名称:版本 --port=端口 --namespace ns名称
  kubectl run mynginx --image=nginx:1.20 --port=80 --namespace ns_test
  # 创建pod
  kubectl apply/create -f pod-*.yaml
  # 删除pod
  kubectl delete -f pod-*.yaml
  • 10-5、去除点污点,设为可调度

kubectl taint nodes –all node-role.kubernetes.io/master
注:node-role.kubernetes.io/master-:表示去除所有名为“node-role.kubernetes.io/master”的污点

# 1. 检查组件运行状态
kubectl get cs
----------------------------------------------------------------------------
NAME                 STATUS    MESSAGE             ERROR
scheduler            Healthy   ok  -- 调度服务  作用是将pod调度到node
controller-manager   Healthy   ok  -- 自动化修复服务  作用:Node宕机后自动修复
etcd-0               Healthy   {"health":"true"}  -- 服务注册发现
----------------------------------------------------------------------------

# 2. 查看节点状态
kubectl get nodes

# 3. 使用Pod的ip+pod里面运行容器的端口
# 集群中的任意一个机器以及任意的应用都能通过Pod分配的ip来访问这个Pod
curl  192.168.26.6

原文地址:https://blog.csdn.net/liyb1078422974/article/details/134710883

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_19215.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注