Kubernetes - Kubernetes的组件

Pod

在Docker中我们可以通过docker run去运行一个container,但是在Kubernetes的环境中,Pod使最小维护单元,container是运行在Pod中的。我们可以通过YAML文件定义一个Pod:

  1. 创建一个pod的yaml文件,名称为nginx_pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container
    image: nginx
    ports:
    - containerPort: 80
  1. 根据该nginx_pod.yaml文件创建pod
kubectl apply -f nginx_pod.yaml

在这里插入图片描述
3. 查看pod
01. kubectl get pods
在这里插入图片描述
02. kubectl get pods -o wide
在这里插入图片描述
03. kubectl describe pod nginx-pod
在这里插入图片描述
4. 访问nginx容器
在这里插入图片描述
5. 删除Pod

kubectl delete -f nginx_pod.yaml   # 只能通过yaml文件删除
kubectl get pods

在这里插入图片描述

Controller

Pod是Kubertenes体系中最小运行单元,如果我们想把Pod由一个变成两个,两个变成三个,并且我的服务想一直保持在三个Pod的话,该怎样保持、如果维护这个Pod呢?

Kubertenes中是通过Controller来进行维护Pod的。官网https://kubernetes.io/docs/concepts/workloads/controllers/

Kubertenes中Controller有几种,比较常用的ReplicationController、ReplicaSet和deployment都可以用来维护Pod。DaemonSet和StatefulSet也可以维护Pod,但并不常用。

ReplicationController
官网:https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/
ReplicationController定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,所以ReplicationController的定义包含以下几个部分:

  • Pod期待的副本数(replicas)
  • 用于筛选目标Pod的Label Selector
  • 当Pod的副本数量小于预期数量时,用于创建新Pod的Pod模板(template)

也就是说通过Replication Controller实现了集群中Pod的高可用,减少了传统IT环境中手工运维的工作。

  1. 创建nginx_replication.yaml文件
apiVersion: v1
kind: ReplicationController
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

kind:表示要新建对象的类型
spec.selector:表示需要管理的Pod的label,这里表示包含app: nginx的label的Pod都会被该RC管理
spec.replicas:表示受此RC管理的Pod需要运行的副本数
spec.template:表示用于定义Pod的模板,比如Pod名称、拥有的label以及Pod中运行的应用等。
通过改变RC里Pod模板中的镜像版本,可以实现Pod的升级功能

  1. 根据nginx_replication.yaml创建pod
    在这里插入图片描述
  2. 查看pod
    在这里插入图片描述
    我们可以看到一共3个pod,一个运行在worker01节点上,两个运行在worker02节点上。
  3. 删除worker02节点上的nginx-tj88k这个pod
    在这里插入图片描述
  4. 然后再次查看pod
    在这里插入图片描述
    我们可以看到worker02节点上的nginx-tj88k已经被删除,但是Kubernetes在worker01节点上又重新创建了一个新的pod。
  5. 对pod进行扩缩容
kubectl scale rc nginx --replicas=5

在这里插入图片描述
再次查看pod的时候,我们发现已经变成了5个pod。
7. 删除pod
在这里插入图片描述

ReplicaSet(RS)
官网:https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

在Kubernetes v1.2时,RC就升级成了另外一个概念:Replica Set,官方解释为“下一代RC”
ReplicaSet和RC没有本质的区别,kubectl中绝大部分作用于RC的命令同样适用于RS
RS与RC唯一的区别是:RS支持基于集合的Label Selector(Set-based selector),而RC只支持基于等式的Label Selector(equality-based selector),这使得Replica Set的功能更强

ReplicaSet的yaml模板:

apiVersion: extensions/v1beta1
kind: ReplicaSet
metadata:
  name: frontend
spec:
  matchLabels: 
    tier: frontend
  matchExpressions: 
    - {key:tier,operator: In,values: [frontend]}
  template:
  ...

注意:一般情况下,我们很少单独使用Replica Set,它主要是被Deployment这个更高的资源对象所使用,从而形成一整套Pod创建、删除、更新的编排机制。当我们使用Deployment时,无须关心它是如何创建和维护Replica Set的,这一切都是自动发生的。同时,无需担心跟其他机制的不兼容问题(比如ReplicaSet不支持rolling-update但Deployment支持)。

Deployment
官网:https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

Deployment相对RC最大的一个升级就是我们可以随时知道当前Pod“部署”的进度。
创建一个Deployment对象来生成对应的Replica Set并完成Pod副本的创建过程
检查Deploymnet的状态来看部署动作是否完成(Pod副本的数量是否达到预期的值)

  1. 创建nginx_deployment.yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80
  1. 根据nginx_deployment.yaml文件创建pod
    在这里插入图片描述
  2. 查看Pods、deployment以及replicaset
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  3. 当前nginx的版本是1.7.9, 我们要更新nginx 的镜像版本到1.9.1
kubectl set image deployment nginx-deployment nginx=nginx:1.9.1

在这里插入图片描述

Namespace

查看当前系统中的namespace:

kubectl get namespaces

在这里插入图片描述
我们也可以创建一个自己的namespace去做资源的隔离,比如隔离pod、service等
myns-namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: myns

在这里插入图片描述
在指定namespace下创建资源:

  1. 创建pod的yaml文件

nginx-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  namespace: myns
spec:
  containers:
  - name: nginx-container
    image: nginx
    ports:
    - containerPort: 80
  1. 通过kubectl创建pod
    在这里插入图片描述
  2. 查看默认namespace下的pod,发现找不到我们刚刚创建的pod
    在这里插入图片描述
  3. 查看myns命名空间下的Pod和资源
    在这里插入图片描述

kubectl get pods --all-namespaces #查找所有命名空间下的pod

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无法无天过路客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值