Kubernetes 基础知识

目录

一、Kubernetes 基础概念

1.容器编排

2. kubernetes概念

二、Kubernetes 组件

​编辑

1. 控制平面(Control Plane)

2. 工作节点(Node)

三、kubernetes 入门实战

1.Pod 

2.LABEL

3.Namespace

4.Deployment 

5.servie


一、Kubernetes 基础概念

1.容器编排

Kubernetes(简称 K8s)是一个开源的容器编排平台Kubernetes 用于自动化部署、扩展和管理容器化应用,解决多容器应用的调度、网络、存储等问题。

kubernetes 中,所有的内容都抽象为资源,用户需要通过操作资源来管理 kubernetes
kubernetes 的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes 集群中运行一个个的容器,并将指定的程序跑在容器中。
kubernetes 的最小管理单元是 pod 而不是容器,所以只能将容器放在 Pod 中,而 kubernetes 一 般也不会直接管理Pod ,而是通过 Pod控制器 来管理 Pod 的。
Pod 可以提供服务之后,就要考虑如何访问 Pod 中服务, kubernetes 提供了 Service 资源实现
这个功能。
当然,如果Pod 中程序的数据需要持久化, kubernetes 还提供了各种 存储 系统。

2. kubernetes概念

学习kubernetes的核心,就是学习如何对集群上的Pod、Pod控制器、Service、存储等各种资源进行操作

Pod kubernetes的最小控制单元;一组容器的集合【一个pod中可以有1个或者多个容器】;共享网络【一个Pod中的所有容器共享同一网络】;生命周期是短暂的(服务器重启后,就找不到了)

Node :工作负载节点,由master分配容器到这些node工作节点上,然后node节点上的docker负责容器的运行

Master :集群控制节点,每个集群需要至少一个master节点负责集群的管控

Controller :控制器,通过它来实现对pod的管理,比如启动pod、停止pod、伸缩pod的数量等等

Service pod对外服务的统一入口,下面可以维护者同一类的多个pod

Label :标签,用于对pod进行分类,同一类pod会拥有相同的标签

NameSpace:命名空间,用来隔离pod的运行环境

二、Kubernetes 组件

Kubernetes 集群由一个控制平面和一个或多个 worker 节点组成。 以下是主要组件的简要概述:

1. 控制平面(Control Plane)

管理集群的整体状态负责集群的决策 ( 管理 )

ApiServer : 资源操作的唯一入口,接收用户输入的命令,提供认证、授权、访问控制、API注册和发现等机制
 Scheduler : 负责集群资源调度,按照预定的调度策略将Pod调度到相应的node节点上
 ControllerManager : 负责维护集群的状态,比如程序部署安排、故障检测、自动扩展、滚动更新等
 Etcd :负责存储集群中各种资源对象的信息k/v方式存储,所有的 k8s 集群数据存放在此
 Kuberctl : 命令行配置工具

2. 工作节点(Node)

在每个节点上运行,维护正在运行的pod 并提供 Kubernets 运行时环境(干活)

Kubelet : 负责维护容器的生命周期,即通过控制docker,来创建、更新、销毁容器,会按固定频率检查节点健康状态并上报给 APIServer,该状态会记录在 Node 对象的 status 中。
KubeProxy : 负责提供集群内部的服务发现和负载均衡,主要就是为 Service 提供服务的,来实现内部从 Pod 到 Service  和外部 NodePort 到 Service 的访问。
 Docker : 负责节点上容器的各种操作

三、kubernetes 入门实战

kubernetes在集群启动之后,会默认创建几个namespace:default、kube-node-lease、kube-public、kube-system

默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。

1.Pod 

Pod是kubernetes集群进行管理的最小单元程序要运行必须部署在容器中,而容器必须存在于Pod中。Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。同一个Pod中的容器共享 IP 地址,进程间的通讯(IPC,Inter-Process Communication,进程间通信),主机名以及其他资源。

  • 同一 Node 中的 Pod 的默认路由都是 docker0 的地址,由于他们关联在同一个 docker0 网桥上,地址段相同,所以能直接通信。
  • 不同 Node 中的 Pod 间通信要满足两个条件: Pod 的 IP 不能冲突;将 Pod 的 IP 和所在的 Node 的 IP 关联起来,通过这个关联让 Pod 可以互相访问。

常用命令:

#查看Pod基本信息

kubectl get pods -n dev

#查看Pod详细信息

kubectl describe pod nginx -n dev

#获取Pod 的ip

kubectl get pods -n dev -o wide

#访问Pod

curl  http://10.244.1.23:80

#删除指定Pod

kubectl delete pod nginx -n dev

#通过yaml文件创建Pod

kubectl create -f pod.yaml

yaml 配置: 

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
spec:
  containers:
  - name: nginx
    image: nginx:1.19
    ports:
    - containerPort: 80

2.LABEL

Label(标签)是 Kubernetes 系统中另外一个核心概念。一个 Label 是一个 key-value 的键值对,其中 key 与 value 由用户自己指定。Label 可以附加到各种资源对象上,例如 Node、Pod、Service、RC 等。一个资源对象可以定义任意数量的 Label,同一个 Label 也可以被添加到任意数量的资源对象中,也可以在对象创建后动态添加或者删除。

另外可以通过给指定的资源对象捆绑一个或多个不同的 Label,来实现多纬度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作。给某个资源对象定义一个 Label,就相当于给它打了一个标签;随后可以通过 Label selector 标签选择器查询和筛选拥有某些 Label 的资源对象,Kubernetes 通过这种方式实现了类似 SQL 的简单又通用的对象查询机制。 

kubectl  label  pod  nginx-pod  ver=2.0  -n  dev

如果要更新标签,需要在上面一条后面加上 --overwrite

#删除标签:

kubectl  label  pod  nginx-pod  ver-  -n  dev

3.Namespace

命名空间namespace是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的命名空间,实现资源的隔离。在Kubernetes中,名称空间可以用来:

  • 将不同的应用程序隔离开来,避免命名冲突和资源竞争。 -
  • 为不同的团队或项目提供独立的环境,使它们可以独立地管理和部署应用程序。
  • 控制资源配额和访问权限,以确保应用程序之间的安全隔离。

可以抽象的吧Namespace理解为,QQ分组,分组中存着不同的好友,好友就是容器。

#查看所有名称空间

kubectl get  ns 

#查看具体哪一个名称空间

kubectl get ns dev

#以yaml的形式查看名称空间

kubectl  get ns  dev -o yaml

#创建名称空间

kubectl  create  ns  dev

#删除名称空间

kubectl  delete  ns  dev

使用配置文件(命令对象配置 )的方式:


[root@k8s-master ~]# kubectl get ns dev
Error from server (NotFound): namespaces "dev" not found
#写一个ns的yaml文件
[root@k8s-master ~]# vim ns-dev.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: dev
#创建命名空间
[root@k8s-master ~]# kubectl create -f ns-dev.yaml
namespace/dev created
#删除命名空间
[root@k8s-master ~]# kubectl delete -f ns-dev.yaml
namespace "dev" deleted

4.Deployment 

可以创建一组Pod来提供具有高可用的服务,如果只删除Pod,控制器会立即拉取一个Pod出来,彻底删除则需要删除deployment。

1.命令行形式:

kubectl create deployment nginx-deployment --image nginx:1.19  --replicas 3 --port 80 -n dev
#其中 --replicas 3 表示指定Pod数

2.yaml 形式: 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.19

5.servie

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。

为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合并且提供一个统一的入口地址通过访问Service的入口地址就能访问到后面的pod服务

Service在很多情况下只是一个概念,真正起作用的其实是kube-proxy服务进程,每个Node节点上都运行着一个kube-proxy服务进程。当创建Service的时候会通过api-server向etcd写入创建的service的信息,而kube-proxy会基于监听的机制发现这种Service的变动,然后它会将最新的Service信息转换成对应的访问规则。

1.命令行形式:

kubectl expose deployment nginxpod  --name=svc-ngx  --type=NodePort --port 80 --target-port 80 -n dev

然后浏览器访问任意节点的ip地址奖赏端口号就能访问到服务了

2.yaml 配置文件:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
  type: ClusterIP  # 或 NodePort/LoadBalancer

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值