k8s-pod-基本概念

什么是Pod?

Pod是一组紧密关联的容器集合,也叫它容器组。它们共享PID、IPC、Network和UTS namspace,是kubernets调度的基础单元。Pod的设计理念是支持多个容器在一个Pod中共享网络和文件系统,可以通过进程间通信和文件共享这种简单高效的方式组合完成服务。一个pod运行多个容器,又叫边车模式(SideCar)

容器是一种资源隔离单位,比如隔离CPU、内存等,应用程序住在容器中,抽象特征:

1、容器就是应用+操作系统的封装,是一种资源隔离抽象
2、Pod是容器的包装,它是虚拟机抽象
3、K8S是管理Pod虚拟机的数据中心抽象

在这里插入图片描述
Pod是k8s中的最小调度单元,一个Pod可以包含一个或多个容器,同一Pod内的容器共享存储卷和网络空间。
共享存储:称为卷Volumes;
网络:每个 Pod在集群中有个唯一的 IP,container共享该IP地址;
container(容器):例如容器的镜像版本,对外暴露的端口等;

Pod创建流程

在这里插入图片描述K8s通过watch的机制进行每个组件的协作:

1、用户使用kubectl create或apply yaml文件创建pod,请求发送到apiseerver,apiserver将yaml中的属性信息(metadata)写入etcd;
2、apiserver触发watch机制准备创建pod,转发给scheduler,使用调度算法选择worker节点,返回绑定的node信息给apiserver写入etcd;
3、apiserver又通过watch机制调用kubelet,按照pod信息触发docker run命令创建容器;
4、pod创建完成之后经由kubelet将pod的信息发送给apiserver,最后写入etcd(kubectl get pods命令调用etcd的信息);

如何发布Pod?

1、
发布 : kubectl apply -f .
转发暴露pod:kubectl port-forward mysql 53306:3306

查看:kubectl get all、kubectl describe pod mysql
删除:kubectl delete po mysql

 apiVersion: v1
 kind: Pod
 metadata:
   name: mysql
   labels:
     name: mysql
 spec:
   containers:
   - name: mysql
     image: mysql:5.7
     resources:
       limits:
         memory: "500Mi"
         cpu: "500m"
     env: 
       - name: MYSQL_ROOT_PASSWORD
         value: root
       - name: MYSQL_DATABASE
         value: test
     ports:
       - containerPort: 53306

标签

解决问题:部署同一组件的多个副本、多个版本或不同运行环怎么区分
定义:键值对KEY=VALUE
特征:标记任何资源、资源内唯一、一个资源可以有多个标签、随时随地创建
作用:版本发布的切换、运行环境的切换、功能分层管理、金丝雀发布等

apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    k8s.kuboard.cn/displayName: nginx gw on tencent cloud
  labels:
    k8s.kuboard.cn/layer: gateway  #两个标签被附加到了pod
    k8s.kuboard.cn/name: nginx
  name: nginx
  namespace: default
查看:kubectl get deployment --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS mongodb-deployment 1/1 1 1 21d app=mongodb nginx 3/3 3 3 25h k8s.kuboard.cn/layer=gateway,k8s.kuboard.cn/name=nginx nginx-deployment 2/2 2 2 21d app=nginx

再添加:kubectl get deployment -L run-env,run-version
NAME READY UP-TO-DATE AVAILABLE AGE RUN-ENV RUN-VERSION mongodb-deployment 1/1 1 1 21d nginx 3/3 3 3 25h local  1.0

筛选

kubectl get deployment -l run-env=local --show-labels
kubectl get deployment -l run-env=sit --show-labels
kubectl get deployment -l run-env!=sit --show-labels
kubectl get deployment -l run-env!=sit,run-version='1.0' --show-labels

调度pod到指定节点

随机调度、透明访问,是k8s的标准实现方式,但是在某些场景:有些worker是机械硬盘,有些是固态硬盘、有些提供GPU加速等等

GPU计算是使用GPU(图形处理单元)作为协处理器来加速CPU,以加快科学、分析、工程、消费和企业应用程序的运行速度

解决方案 是:

同过标签和标签选择器,对资源进行描述,以应对结点的需求。

apiVersion: v1
kind: Node
metadata:
  annotations:
    kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
    node.alpha.kubernetes.io/ttl: '0'
    volumes.kubernetes.io/controller-managed-attach-detach: 'true'
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/os: linux
    gpu: 'true'                      # 在此处添加标签
    kubernetes.io/arch: amd64
kubectl get nodes -l gpu='true' --show-labels
NAME STATUS ROLES AGE VERSION LABELS minikube Ready control-plane,master 22d v1.23.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=minikube,kubernetes.io/os=linux,minikube.k8s.io/commit=362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7,minikube.k8s.io/name=minikube,minikube.k8s.io/primary=true,minikube.k8s.io/updated_at=2022_03_12T12_00_47_0700,minikube.k8s.io/version=v1.25.2,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=

kubectl get nodes -l gpu!='true' --show-labels
No resources found


NAME STATUS ROLES AGE VERSION LABELS minikube Ready control-plane,master 22d v1.23.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,gpu=true,kubernetes.io/arch=amd64,kubernetes.io/hostname=minikube,kubernetes.io/os=linux,minikube.k8s.io/commit=362d5fdc0a3dbee389b3d3f1034e8023e72bd3a7,minikube.k8s.io/name=minikube,minikube.k8s.io/primary=true,minikube.k8s.io/updated_at=2022_03_12T12_00_47_0700,minikube.k8s.io/version=v1.25.2,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=

#kubernetes.io/hostname=minikube 是该节点的实际主机名
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值