Error[8]: Undefined offset: 20, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

Kubernetes(1)简介、部署、命令、资源清单、生命周期、控制器 一、Kubernetes简介

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。

Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的安装flannel网络组件好处:

隐藏资源管理和错误处理,用户仅需要关注应用的开发。 服务高可用、高可靠。 可将负载运行在由成千上万的机器联合而成的集群中。  

kubernetes可以做什么?

服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

自动完成装箱计算

Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

密钥与配置管理

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

二、Kubernetes部署

注意:需要关闭节点的selinux和iptables防火墙,所有节点部署docker引擎。

官网:Kubernetes 文档 | Kubernetes

部署参考文档:安装 kubeadm | Kubernetes

禁用每个节点交换分区
[root@server2 ~]# swapoff -a
[root@server2 ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
配置docker

参考文档:容器运行时 | Kubernetes

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# vim daemon.json

每个节点都需要开启docker

[root@server2 docker]# rm *.pem -f
[root@server2 docker]# systemctl enable docker.service
[root@server2 docker]# systemctl enable docker.socket
[root@server2 docker]# systemctl start docker.socket
[root@server2 docker]# systemctl  start docker.service
[root@server2 docker]# docker info
[root@server2 docker]# scp daemon.json server3:/etc/docker/

镜像配置

kubernetes镜像-kubernetes下载地址-kubernetes安装教程-阿里巴巴开源镜像站

[root@server2 yum.repos.d]# vim k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
安装部署软件kubeadm
[root@server2 yum.repos.d]# yum install -y kubeadm kubelet kubectl  每个节点都安装

[root@server2 yum.repos.d]# scp k8s.repo server3:/etc/yum.repos.d/  
[root@server2 yum.repos.d]# scp k8s.repo server4:/etc/yum.repos.d/

[root@server2 yum.repos.d]# systemctl enable --now kubelet
[root@server2 yum.repos.d]# ssh server3 systemctl enable --now kubelet
[root@server2 yum.repos.d]# ssh server4 systemctl enable --now kubelet

将server1设置为仓库,harbor中建立项目

列出所需的镜像

[root@server2 ~]#  kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

拉取镜像

[root@server2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

[root@server2 ~]# docker login reg.westos.org

[root@server2 ~]# docker images|grep registry |awk '{print ":"}'| awk -F/ '{system("docker tag "
[root@server2 ~]# wget https://raw.githubusercontent.com/flannel-io/flannel/master/documentation/kube-flannel.yml
[root@server1 harbor]# docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker pull rancher/mirrored-flannelcni-flannel:v0.16.1
[root@server1 harbor]# docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker tag rancher/mirrored-flannelcni-flannel:v0.16.1 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
[root@server1 harbor]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
" reg.westos.org/k8s/""")}' [root@server2 ~]# docker images |grep k8s | awk '{system("docker push "":""")}' [root@server2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s ##初始化集群 [root@server2 ~]# ll /etc/kubernetes/admin.conf -rw------- 1 root root 5634 Jan 11 11:33 /etc/kubernetes/admin.conf [root@server2 ~]# export KUBEConFIG=/etc/kubernetes/admin.conf [root@server2 ~]# vim .bash_profile export KUBEConFIG=/etc/kubernetes/admin.conf

 

安装flannel网络组件

https://github.com/flannel-io/flannel

[root@server3 ~]# kubeadm join 172.25.6.2:6443 --token miwogn.wugaaaylusb7toed --discovery-token-ca-cert-hash
[root@server4 ~]# kubeadm join 172.25.6.2:6443 --token miwogn.wugaaaylusb7toed --discovery-token-ca-cert-hash

 补齐命令功能

echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@server2 ~]# source .bashrc 
[root@server2 ~]# kubectl apply -f kube-flannel.yml 

节点扩容

# 创建Deployment和Service资源

$ kubectl create -f demo-deployment.yaml
$ kubectl create -f demo-service.yaml
kubectl命令

kubectl命令指南:Kubectl Reference Docs

常用命令

create 命令:根据文件或者输入来创建资源

# 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效

$ kubectl delete -f demo-deployment.yaml 
$ kubectl delete -f demo-service.yaml

# 也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源

$ kubectl delete 具体的资源名称

delete 命令:删除资源

# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces

# 查看pod列表
$ kubectl get pod

# 显示pod节点的标签信息
$ kubectl get pod --show-labels

# 根据指定标签匹配到具体的pod
$ kubectl get pods -l app=example

# 查看node节点列表
$ kubectl get node 

# 显示node节点的标签信息
$ kubectl get node --show-labels

# 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide

# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system

# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces

# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces

# 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get pod --all-namespaces  -o wide

# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs

# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide

get 命令 :获得资源信息

[root@server2 pod]# vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent 
    ports:
      - name: http
        containerPort: 80
        hostPort: 80
[root@server2 pod]# kubectl apply -f pod.yml
pod/pod-example created
[root@server2 pod]# kubectl get pod
[root@server2 pod]# kubectl delete -f pod.yml
三、资源清单

必须存在的属性【创建资源清单的时候没有这些属性的存在它是不允许被执行的】

 主要属性【这些属性比较重要,如果不指定的话系统会自动补充默认值】

快速打印清单

[root@server2 ~]# kubectl run demo --image=myapp:v1
pod/demo created
[root@server2 ~]# kubectl get pod -o yaml

api参考:Kubernetes API Reference Docs

指定容器所在主机需要监听的端口号

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent 
    #ports:
    #  - name: http
    #    containerPort: 80
    #    hostPort: 80
    resources:
      limits:
        cpu: 0.2
        memory: 200Mi
      requests:
        cpu: 0.1
        memory: 100Mi

指定CPU、MEM的限制

  nodeSelector:
    kubernetes.io/hostname: server4
  hostNetwork: true

 一般断开后重联会连接之前连接过的节点,但我们可以设置连接节点

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent
  #initContainers:
  - name: myapp2
    image: busyboxplus 
    imagePullPolicy: IfNotPresent
    stdin: true
    tty: true

四、Pod生命周期

Pod 的生命周期 | Kubernetes

Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded 或者 Failed 阶段。

在 Pod 运行期间,kubelet 能够重启容器以处理一些失效场景。 在 Pod 内部,Kubernetes 跟踪不同容器的状态 并确定使 Pod 重新变得健康所需要采取的动作。

在 Kubernetes API 中,Pod 包含规约部分和实际状态部分。 Pod 对象的状态包含了一组 Pod 状况(Conditions)。 如果应用需要的话,你也可以向其中注入自定义的就绪性信息。

Pod 在其生命周期中只会被调度一次。 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者 被终止。

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。

Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。 该阶段并不是对容器或 Pod 状态的综合汇总,也不是为了成为完整的状态机。

Pod 阶段的数量和含义是严格定义的。 除了本文档中列举的内容外,不应该再假定 Pod 有其他的 phase 值。

下面是 phase 可能的值:

一个pod内启动多个容器

Init 容器 | Kubernetes

注意:不可以启动同一种服务

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

 用的是同一网络栈

容器中加初始化

查看日志有错误,需要加svc

 

五、控制器

Pod 的分类:

自主式 Pod:Pod 退出后不会被创建控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目 

控制器类型:

Replication Controller和ReplicaSet

ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。 

Deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。 典型的应用场景: 用来创建Pod和ReplicaSet 滚动更新和回滚 扩容和缩容 暂停与恢复

DaemonSet

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。  DaemonSet 的典型用法: 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。 在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等  一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。  一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。 

StatefulSet

StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”  StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。  StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。

Job

执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束

CronJob HPA全称Horizontal Pod Autoscaler  

根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放

ReplicaSet–rs控制器

rs控制器:控制副本,确定任何时间都有指定数量的Pod副本在运行,根据标签匹配。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
Deployment控制器
kubectl apply -f deployment.yaml
kubectl get pod
kubectl get all

用来创建pod和ReplicaSet,依靠标签显示,相比较rs可更新容器,可扩容,可暂停和恢复

查看节点

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        image: zabbix/zabbix-agent
DaemonSet控制器

每个集群节点都需要创建,保证每个集群节点有且只有一个的 *** 作。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
Job控制器

运行一次,运行完毕直接回收

测试:计算Pi

计算结果位于日志中。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cronjob
            image: busyboxplus
            args:
            - /bin/sh
            - -c
            - date; echo Hello from k8s cluster
          restartPolicy: OnFailure

定时job

[+++]

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
Kubernetes(1)简介、部署、命令、资源清单、生命周期、控制器_随笔_内存溢出

Kubernetes(1)简介、部署、命令、资源清单、生命周期、控制器

Kubernetes(1)简介、部署、命令、资源清单、生命周期、控制器,第1张

Kubernetes(1)简介、部署、命令、资源清单、生命周期、控制器 一、Kubernetes简介

Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 Kubernetes 拥有一个庞大且快速增长的生态系统。Kubernetes 的服务、支持和工具广泛可用。

在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年,Borg系统运行管理着成千上万的容器应用。

Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统中的经验和教训。 

Kubernetes对计算资源进行了更高层次的抽象,通过将容器进行细致的组合,将最终的应用服务交给用户。

Kubernetes的安装flannel网络组件好处:

隐藏资源管理和错误处理,用户仅需要关注应用的开发。 服务高可用、高可靠。 可将负载运行在由成千上万的机器联合而成的集群中。  

kubernetes可以做什么?

服务发现和负载均衡

Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果进入容器的流量很大, Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。

存储编排

Kubernetes 允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

自动部署和回滚

你可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态 更改为期望状态。例如,你可以自动化 Kubernetes 来为你的部署创建新容器, 删除现有容器并将它们的所有资源用于新容器。

自动完成装箱计算

Kubernetes 允许你指定每个容器所需 CPU 和内存(RAM)。 当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。

自我修复

Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的 运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。

密钥与配置管理

Kubernetes 允许你存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

二、Kubernetes部署

注意:需要关闭节点的selinux和iptables防火墙,所有节点部署docker引擎。

官网:Kubernetes 文档 | Kubernetes

部署参考文档:安装 kubeadm | Kubernetes

禁用每个节点交换分区
[root@server2 ~]# swapoff -a
[root@server2 ~]# vim /etc/fstab 
#/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
配置docker

参考文档:容器运行时 | Kubernetes

[root@server2 ~]# cd /etc/docker/
[root@server2 docker]# vim daemon.json

每个节点都需要开启docker

[root@server2 docker]# rm *.pem -f
[root@server2 docker]# systemctl enable docker.service
[root@server2 docker]# systemctl enable docker.socket
[root@server2 docker]# systemctl start docker.socket
[root@server2 docker]# systemctl  start docker.service
[root@server2 docker]# docker info
[root@server2 docker]# scp daemon.json server3:/etc/docker/

镜像配置

kubernetes镜像-kubernetes下载地址-kubernetes安装教程-阿里巴巴开源镜像站

[root@server2 yum.repos.d]# vim k8s.repo

[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
安装部署软件kubeadm
[root@server2 yum.repos.d]# yum install -y kubeadm kubelet kubectl  每个节点都安装

[root@server2 yum.repos.d]# scp k8s.repo server3:/etc/yum.repos.d/  
[root@server2 yum.repos.d]# scp k8s.repo server4:/etc/yum.repos.d/

[root@server2 yum.repos.d]# systemctl enable --now kubelet
[root@server2 yum.repos.d]# ssh server3 systemctl enable --now kubelet
[root@server2 yum.repos.d]# ssh server4 systemctl enable --now kubelet

将server1设置为仓库,harbor中建立项目

列出所需的镜像

[root@server2 ~]#  kubeadm config images list --image-repository registry.aliyuncs.com/google_containers

拉取镜像

[root@server2 ~]# kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers

[root@server2 ~]# docker login reg.westos.org

[root@server2 ~]# docker images|grep registry |awk '{print ":"}'| awk -F/ '{system("docker tag "
[root@server2 ~]# wget https://raw.githubusercontent.com/flannel-io/flannel/master/documentation/kube-flannel.yml
[root@server1 harbor]# docker pull rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker pull rancher/mirrored-flannelcni-flannel:v0.16.1
[root@server1 harbor]# docker tag rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0 reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.0.0
[root@server1 harbor]# docker tag rancher/mirrored-flannelcni-flannel:v0.16.1 reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
[root@server1 harbor]# docker push reg.westos.org/rancher/mirrored-flannelcni-flannel:v0.16.1
" reg.westos.org/k8s/""")}' [root@server2 ~]# docker images |grep k8s | awk '{system("docker push "":""")}' [root@server2 ~]# kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository reg.westos.org/k8s ##初始化集群 [root@server2 ~]# ll /etc/kubernetes/admin.conf -rw------- 1 root root 5634 Jan 11 11:33 /etc/kubernetes/admin.conf [root@server2 ~]# export KUBEConFIG=/etc/kubernetes/admin.conf [root@server2 ~]# vim .bash_profile export KUBEConFIG=/etc/kubernetes/admin.conf

 

安装flannel网络组件

https://github.com/flannel-io/flannel

[root@server3 ~]# kubeadm join 172.25.6.2:6443 --token miwogn.wugaaaylusb7toed --discovery-token-ca-cert-hash
[root@server4 ~]# kubeadm join 172.25.6.2:6443 --token miwogn.wugaaaylusb7toed --discovery-token-ca-cert-hash

 补齐命令功能

echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@server2 ~]# source .bashrc 
[root@server2 ~]# kubectl apply -f kube-flannel.yml 

节点扩容

# 创建Deployment和Service资源

$ kubectl create -f demo-deployment.yaml
$ kubectl create -f demo-service.yaml
kubectl命令

kubectl命令指南:Kubectl Reference Docs

常用命令

create 命令:根据文件或者输入来创建资源

# 根据yaml文件删除对应的资源,但是yaml文件并不会被删除,这样更加高效

$ kubectl delete -f demo-deployment.yaml 
$ kubectl delete -f demo-service.yaml

# 也可以通过具体的资源名称来进行删除,使用这个删除资源,同时删除deployment和service资源

$ kubectl delete 具体的资源名称

delete 命令:删除资源

# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces

# 查看pod列表
$ kubectl get pod

# 显示pod节点的标签信息
$ kubectl get pod --show-labels

# 根据指定标签匹配到具体的pod
$ kubectl get pods -l app=example

# 查看node节点列表
$ kubectl get node 

# 显示node节点的标签信息
$ kubectl get node --show-labels

# 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide

# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system

# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces

# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces

# 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get pod --all-namespaces  -o wide

# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs

# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide

get 命令 :获得资源信息

[root@server2 pod]# vim pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent 
    ports:
      - name: http
        containerPort: 80
        hostPort: 80
[root@server2 pod]# kubectl apply -f pod.yml
pod/pod-example created
[root@server2 pod]# kubectl get pod
[root@server2 pod]# kubectl delete -f pod.yml
三、资源清单

必须存在的属性【创建资源清单的时候没有这些属性的存在它是不允许被执行的】

 主要属性【这些属性比较重要,如果不指定的话系统会自动补充默认值】

快速打印清单

[root@server2 ~]# kubectl run demo --image=myapp:v1
pod/demo created
[root@server2 ~]# kubectl get pod -o yaml

api参考:Kubernetes API Reference Docs

指定容器所在主机需要监听的端口号

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent 
    #ports:
    #  - name: http
    #    containerPort: 80
    #    hostPort: 80
    resources:
      limits:
        cpu: 0.2
        memory: 200Mi
      requests:
        cpu: 0.1
        memory: 100Mi

指定CPU、MEM的限制

  nodeSelector:
    kubernetes.io/hostname: server4
  hostNetwork: true

 一般断开后重联会连接之前连接过的节点,但我们可以设置连接节点

apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: myapp
    image: myapp:v1
    imagePullPolicy: IfNotPresent
  #initContainers:
  - name: myapp2
    image: busyboxplus 
    imagePullPolicy: IfNotPresent
    stdin: true
    tty: true

四、Pod生命周期

Pod 的生命周期 | Kubernetes

Pod 遵循一个预定义的生命周期,起始于 Pending 阶段,如果至少 其中有一个主要容器正常启动,则进入 Running,之后取决于 Pod 中是否有容器以 失败状态结束而进入 Succeeded 或者 Failed 阶段。

在 Pod 运行期间,kubelet 能够重启容器以处理一些失效场景。 在 Pod 内部,Kubernetes 跟踪不同容器的状态 并确定使 Pod 重新变得健康所需要采取的动作。

在 Kubernetes API 中,Pod 包含规约部分和实际状态部分。 Pod 对象的状态包含了一组 Pod 状况(Conditions)。 如果应用需要的话,你也可以向其中注入自定义的就绪性信息。

Pod 在其生命周期中只会被调度一次。 一旦 Pod 被调度(分派)到某个节点,Pod 会一直在该节点运行,直到 Pod 停止或者 被终止。

Pod 的 status 字段是一个 PodStatus 对象,其中包含一个 phase 字段。

Pod 的阶段(Phase)是 Pod 在其生命周期中所处位置的简单宏观概述。 该阶段并不是对容器或 Pod 状态的综合汇总,也不是为了成为完整的状态机。

Pod 阶段的数量和含义是严格定义的。 除了本文档中列举的内容外,不应该再假定 Pod 有其他的 phase 值。

下面是 phase 可能的值:

一个pod内启动多个容器

Init 容器 | Kubernetes

注意:不可以启动同一种服务

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx

 用的是同一网络栈

容器中加初始化

查看日志有错误,需要加svc

 

五、控制器

Pod 的分类:

自主式 Pod:Pod 退出后不会被创建控制器管理的 Pod:在控制器的生命周期里,始终要维持 Pod 的副本数目 

控制器类型:

Replication Controller和ReplicaSet

ReplicaSet 是下一代的 Replication Controller,官方推荐使用ReplicaSet。 ReplicaSet 和 Replication Controller 的唯一区别是选择器的支持,ReplicaSet 支持新的基于集合的选择器需求。 ReplicaSet 确保任何时间都有指定数量的 Pod 副本在运行。 虽然 ReplicaSets 可以独立使用,但今天它主要被Deployments 用作协调 Pod 创建、删除和更新的机制。 

Deployment

Deployment 为 Pod 和 ReplicaSet 提供了一个申明式的定义方法。 典型的应用场景: 用来创建Pod和ReplicaSet 滚动更新和回滚 扩容和缩容 暂停与恢复

DaemonSet

DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。  DaemonSet 的典型用法: 在每个节点上运行集群存储 DaemonSet,例如 glusterd、ceph。 在每个节点上运行日志收集 DaemonSet,例如 fluentd、logstash。 在每个节点上运行监控 DaemonSet,例如 Prometheus Node Exporter、zabbix agent等  一个简单的用法是在所有的节点上都启动一个 DaemonSet,将被作为每种类型的 daemon 使用。  一个稍微复杂的用法是单独对每种 daemon 类型使用多个 DaemonSet,但具有不同的标志, 并且对不同硬件类型具有不同的内存、CPU 要求。 

StatefulSet

StatefulSet 是用来管理有状态应用的工作负载 API 对象。实例之间有不对等关系,以及实例对外部数据有依赖关系的应用,称为“有状态应用”  StatefulSet 用来管理 Deployment 和扩展一组 Pod,并且能为这些 Pod 提供*序号和唯一性保证*。  StatefulSets 对于需要满足以下一个或多个需求的应用程序很有价值: 稳定的、唯一的网络标识符。 稳定的、持久的存储。 有序的、优雅的部署和缩放。 有序的、自动的滚动更新。

Job

执行批处理任务,仅执行一次任务,保证任务的一个或多个Pod成功结束

CronJob HPA全称Horizontal Pod Autoscaler  

根据资源利用率自动调整service中Pod数量,实现Pod水平自动缩放

ReplicaSet–rs控制器

rs控制器:控制副本,确定任何时间都有指定数量的Pod副本在运行,根据标签匹配。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
Deployment控制器
kubectl apply -f deployment.yaml
kubectl get pod
kubectl get all

用来创建pod和ReplicaSet,依靠标签显示,相比较rs可更新容器,可扩容,可暂停和恢复

查看节点

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: daemonset-example
  labels:
    k8s-app: zabbix-agent
spec:
  selector:
    matchLabels:
      name: zabbix-agent
  template:
    metadata:
      labels:
        name: zabbix-agent
    spec:
      containers:
      - name: zabbix-agent
        image: zabbix/zabbix-agent
DaemonSet控制器

每个集群节点都需要创建,保证每个集群节点有且只有一个的 *** 作。

apiVersion: batch/v1
kind: Job
metadata:
  name: pi
spec:
  template:
    spec:
      containers:
      - name: pi
        image: perl
        command: ["perl",  "-Mbignum=bpi", "-wle", "print bpi(2000)"]
      restartPolicy: Never
  backoffLimit: 4
Job控制器

运行一次,运行完毕直接回收

测试:计算Pi

计算结果位于日志中。

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: cronjob-example
spec:
  schedule: "* * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cronjob
            image: busyboxplus
            args:
            - /bin/sh
            - -c
            - date; echo Hello from k8s cluster
          restartPolicy: OnFailure

定时job

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5707413.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存