环境准备
命名空间概述
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的基本用法。