kubernetes Pod-01 环境准备及基本用法

119 阅读4分钟

环境准备

命名空间概述

Kubernetes 命名空间(Namespace)是 Kubernetes 集群中用于资源组织和隔离的一个核心概念。命名空间在逻辑上将集群划分为多个虚拟的子集群,每个子集群拥有自己的一组资源对象,并且可以独立管理和控制。

Pod的所有示例全部都在 pod-ns 命名空间下。

创建命名空间

[root@master1 huo-l]# kubectl create ns pod-ns
namespace/pod-ns created

查看命名空间

[root@master1 huo-l]# kubectl get ns
NAME              STATUS   AGE
default           Active   2d
kube-node-lease   Active   2d
kube-public       Active   2d
kube-system       Active   2d
pod-ns            Active   5s

设置环境属于特定命名空间

[root@master1 huo-l]# kubectl config set-context ctx-pod-ns --namespace=pod-ns --cluster=kubernetes --user=kubernetes-admin
Context "ctx-pod-ns" created.

查看创建的运行环境上下文

[root@master1 huo-l]# kubectl config view
apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.40.199:16443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    namespace: pod-ns
    user: kubernetes-admin
  name: ctx-pod-ns
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

设置命名空间上下文

[root@master1 huo-l]# kubectl config use-context ctx-pod-ns
Switched to context "ctx-pod-ns".

查看当前命名空间

[root@master1 huo-l]# kubectl config view --minify | grep namespace:
    namespace: pod-ns

以上,关于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

运行该yaml文件

# 通过 yaml 文件启动 Pod
kubectl apply -f 01.yaml

# 查看运行结果
[root@master1 pod]# kubectl get pod
NAME       READY   STATUS    RESTARTS   AGE
frontend   1/1     Running   0          118s

这个frontend Pod 启动成功后,将启动1个Docker容器

多个容器

apiVersion: v1
kind: Pod
metadata: 
  name: redis-php
  labels: 
    name: redis-php
spec: 
  containers: 
  - name: frontend
    image: kubeguide/guestbook-php-frontend:localredis
    ports: 
    - containerPort: 80
  - name: redis
    image: kubeguide/redis-master
    ports: 
    - containerPort: 6379

查看容器信息

# 运行容器
[root@master1 pod]# kubectl apply -f 02.yaml 
pod/redis-php created
# 查看容器
[root@master1 pod]# kubectl get pod
NAME        READY   STATUS    RESTARTS   AGE
redis-php   2/2     Running   0          2m4s
# 查看pod信息
[root@master1 pod]# kubectl describe pod redis-php
Name:         redis-php
Namespace:    pod-ns
Priority:     0
Node:         node2/192.168.40.183
Start Time:   Thu, 29 Feb 2024 07:56:15 -0500
Labels:       name=redis-php
Annotations:  cni.projectcalico.org/podIP: 10.244.104.2/32
              cni.projectcalico.org/podIPs: 10.244.104.2/32
Status:       Running
IP:           10.244.104.2
IPs:
  IP:  10.244.104.2
Containers:
  frontend:
    Container ID:   docker://c148a7e19f6db1b2d66ec0db02279d12b931594b8b246841e54426941cc86f60
    Image:          kubeguide/guestbook-php-frontend:localredis
    Image ID:       docker-pullable://kubeguide/guestbook-php-frontend@sha256:37c2c1dcfcf0a51bf9531430fe057bcb1d4b94c64048be40ff091f01e384f81e
    Port:           80/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 29 Feb 2024 07:56:34 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-k45gj (ro)
  redis:
    Container ID:   docker://57c183b59aa807a077f44ee3395c22811dbdeef1c3054502ce66abd5baf765ed
    Image:          kubeguide/redis-master
    Image ID:       docker-pullable://kubeguide/redis-master@sha256:e11eae36476b02a195693689f88a325b30540f5c15adbf531caaecceb65f5b4d
    Port:           6379/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 29 Feb 2024 07:57:08 -0500
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-k45gj (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  default-token-k45gj:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-k45gj
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m31s  default-scheduler  Successfully assigned pod-ns/redis-php to node2
  Normal  Pulling    2m30s  kubelet            Pulling image "kubeguide/guestbook-php-frontend:localredis"
  Normal  Pulled     2m13s  kubelet            Successfully pulled image "kubeguide/guestbook-php-frontend:localredis" in 17.417046942s
  Normal  Created    2m13s  kubelet            Created container frontend
  Normal  Started    2m12s  kubelet            Started container frontend
  Normal  Pulling    2m12s  kubelet            Pulling image "kubeguide/redis-master"
  Normal  Pulled     98s    kubelet            Successfully pulled image "kubeguide/redis-master" in 34.798195927s
  Normal  Created    98s    kubelet            Created container redis
  Normal  Started    98s    kubelet            Started container redis

可以看到READY中的信息为 2/2,同一个Pod中的两个容器都已经启动成功

以上就是Pod的基本用法。