K8s系列之:Pod的基本用法

K8s系列之:Pod的基本用法

  • 一、创建由一个容器组成名为frontend的Pod
  • 二、创建由frontend和redis两个容器组成一个名为redis-php的Pod
  • 三、静态Pod
    • 1.配置文件方式
    • 2.HTTP方式

Pod的基本用法为:Pod可以由1个或多个容器组合而成。

一、创建由一个容器组成名为frontend的Pod

apiVersion: v1
kind: Pod
metadata:
  name: frontend
  labels:
    - name: frontend
spec:
  containers:
 - name: frontend
    image: kubeguide/guestbook-php-frontend
    env:
    - name: GET_HOSTS_FROM
      value: env
    ports:
    - containerPort: 80
  • 这个frontend Pod在成功启动之后,将启动1个docer容器

二、创建由frontend和redis两个容器组成一个名为redis-php的Pod

K8s系列之:Pod的基本用法_第1张图片
配置文件frontend-localredis-pod.yaml如下:

apiVersion: v1
kind: Pod
metadata:
  name: redis-php
  labels:
    name: redis-php
spec:
  containers:
 - name: frontend
    image: kubeguide/guestbook-php-frontend
    ports:
    - containerPort: 80
 - name: redis
    image: kubeguide/redis-master
    ports: 
    - containerPort: 6379
  • 属于一个Pod的多个应用之间相互访问时仅需要通过localhost就可以通信,使得这组容器被绑定在了一个环境中。

运行kubectl create命令创建该Pod

kubectl create -f frontend-localredis-pod.yaml
pod "redis-php" created

查看已创建的Pod

kubectl get pods
NAME           READY     STATUS     RESTARTS    AGE
redis-php       2/2      Running        0        10m
  • READY信息为2/2,表示Pod中的两个容器都成功运行了

查看这个Pod的详细信息,可以看到两个容器的定义及创建的过程(Event事件信息):

kubectl describe pod redis-php

三、静态Pod

静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对静态Pod进行健康检查。

静态Pod总是由kubelet进行创建的,并且总是在kubelet所在的Node上运行的。

创建静态Pod有两种方式:

  • 配置文件方式
  • HTTP方式

1.配置文件方式

  • 首先,需要设置kubelet的启动参数"–config",指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,并根据该目录中的.yaml或.json文件进行创建操作。
  • 假设配置目录为/etc/kubelet.d/,配置启动参数:–config=/etc/kubelet.d/,然后重启kubelet服务。
  • 在目录/etc/kubelet.d中放入static-web.yaml文件,内容如下:
apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    name: static-web
spec:
  containers:
  - name: static-web
    image: nginx
    ports:
    - name: web
      containerPort: 80

等待一会儿,查看本机中已经启动的容器:

docker ps
CONTAINER ID    IMAGE  COMMAND   CREATED  STATUS  PORTS   NAMES
                 nginx

可以看到Nginx容器已经被kubelet成功创建出来

到Master节点查看Pod列表,可以看到这个static pod:

kubectl get pods
NAME                 READY       STATUS         RESTARTS        AGE
static-web-node1      1/1        Running           0             5m

由于静态Pod无法通过API Server直接管理,所以在Master节点尝试删除这个Pod,将会使其变成Pending状态,且不会被删除。

kubectl delete pod static-web-node-1
pod "static-web-node-1" deleted

kubectl get pods
NAME                 READY       STATUS         RESTARTS        AGE
static-web-node1      0/1        Pending           0             1m

删除该Pod的操作只能是到其所在Node上,将其定义文件static-web.yaml从/etc/kubelet.d目录下删除

rm -rf /etc/kubelet.d/static-web.yaml
docker ps
//无容器正在运行

2.HTTP方式

通过设置kubelet的启动参数"–manifest-url",kubelet将会定期从该URL地址下载Pod的定义文件,并以.yaml或.json文件的格式进行解析,然后创建Pod。实现方式与配置文件方式是一致的。

你可能感兴趣的:(日常分享专栏,K8s系列,Pod的基本用法)