此部分上接kubernetes学习一:https://blog.csdn.net/weixin_43155804/article/details/125831675?spm=1001.2014.3001.5502
3、资源管理
3.1 资源管理介绍
在kubernetes
所有内容都抽象成资源,用户需要通过操作资源进行管理kubernetes
。
kubernetes本质上是一个集群系统,用户可以在集群中部署各种服务。所谓的部署服务实际上是在kubernetes集群中运行容器,并在容器中运行指定程序。
kubernetes最小管理单位是pod不是容器,所以容器只能放在里面
Pod
中,而kubernetes一般不直接管理Pod,而是通过Pod控制器
来管理Pod的。Pod提供服务后,需要考虑如何访问Pod中服务,kubernetes提供了
Service
实现这一功能的资源。当然,如果Pod中程序的数据需要持久,
kubernetes
还提供了各种存储
系统。
3.2 YAML
语法介绍
YAML
是一个类似 XML
、JSON
的标记性语言。它强调以以标别语言为中心。YAML
本身的定义相对简单,自称"人性化的数据格式语言"。
<!--XML语法格式--> <xiaoming> <age>15</age> <address>Beijing</address> </heima>
# yaml的语法格式 xiaoming: age: 15 address: Beijing
YAML
语法比较简单,主要有以下几种:
- 大小写敏感
- 缩进表示层级关系
- 不允许缩进tab,只允许空格( 低版本限制 )
- 缩进的空层次的元素左对齐,缩进的空同层次的元素
- ‘#’ 表示注释
YAML支持以下数据类型:
- 纯度:单个、不可分割的值
- 对象:键值对的集合,又称映射(mapping)/ 哈希(hash) / 字典(dictionary)
- 数组:一组按顺序排列的值,也称为序列(sequence) / 列表(list)
# 纯量, 是指字符串、布尔值、整数、浮点数等简单值Null、时间、日期 # 1 布尔类型 c1: true (或者True) # 2 整型 c2: 234 # 3 浮点型 c3: 3.14 # 4 null类型 c4: ~ # 使用~表示null # 5 日期类型 c5: 2018-02-17 # 必须使用日期ISO 8601格式,即yyyy-MM-dd # 6 时间类型 c6: 2018-02-17T15:02:31 08:00 # 时间使用ISO 在时间和日期之间连接8601格式,最后使用T 代表时区 # 7 字符串类型 c7: heima # 简单的写法,直接写值 , 如果字符串中间有特殊字符,必须用双引号或单引号包裹 c8: line1 line2 # 字符过多的情况可以拆成多行,每一行会被转化成一个空格
# 对象
# 形式一(推荐):
heima:
age: 15
address: Beijing
# 形式二(了解):
heima: {
age: 15,address: Beijing}
# 数组
# 形式一(推荐):
address:
- 顺义
- 昌平
# 形式二(了解):
address: [顺义,昌平]
提示:
1 书写
yaml
切记:
2 如果需要将多段
yaml
配置放在一个文件中,中间要使用---
分隔3 下面是一个
yaml
转json
的网站,可以通过它验证yaml
是否书写正确https://www.json2yaml.com/convert-yaml-to-json
3.3 资源管理方式
k8s的资源管理方式有三种形式:
-
命令式对象管理:直接使用命令去操作kubernetes资源
[root@master ~]# kubectl run nginx-pod --image=nginx:1.17.1 --port=80
-
命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
[root@master ~]# kubectl create/patch -f nginx-pod.yaml
-
声明式对象配置:通过apply命令和配置文件去操作kubernetes资源
[root@master ~]# kubectl apply -f nginx-pod.yaml
3.3.1 命令式对象管理
kubectl是kubernetes集群的命令行工具,通过它能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。kubectl命令的语法如下:
kubectl [command] [type] [name] [flags]
:指定要对资源执行的操作,例如create、get、delete
:指定资源类型,比如deployment、pod、service
:指定资源的名称,名称大小写敏感
:指定额外的可选参数
# 查看所有pod
[root@master ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-ppmrj 1/1 Running 2 47h
# 查看某个pod
# kubectl get pod pod_name
[root@master ~]# kubectl get pod nginx-6867cdf567-ppmrj
NAME READY STATUS RESTARTS AGE
nginx-6867cdf567-ppmrj 1/1 Running 2 47h
# 查看某个pod,以yaml格式展示结果
[root@master ~]# kubectl get pod nginx-6867cdf567-ppmrj -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2022-07-01T08:00:15Z"
generateName: nginx-6867cdf567-
labels:
app: nginx
pod-template-hash: 6867cdf567
name: nginx-6867cdf567-ppmrj
namespace: default
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-6867cdf567
uid: b501215e-964d-482f-a5d7-4d6d11b21e69
resourceVersion: "4624"
selfLink: /api/v1/namespaces/default/pods/nginx-6867cdf567-ppmrj
uid: 10ff65fc-3fc5-40d2-822d-fe0b50eb7e41
spec:
containers:
- image: nginx:1.14-alpine
imagePullPolicy: IfNotPresent
name: nginx
resources: {
}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-4fbwq
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: node1
priority: 0
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {
}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds: 30
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds: 300
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds: 300
volumes:
- name: default-token-4fbwq
secret:
defaultMode: 420
secretName: default-token-4fbwq
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2022-07-01T08:00:15Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2022-07-03T02:47:06Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2022-07-03T02:47:06Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2022-07-01T08:00:15Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://c26f7b36588d1569569af1ff06368851e0d6dad4f99803fa3bdfa4403b4baf22
image: nginx:1.14-alpine
imageID: docker-pullable://nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
lastState:
terminated:
containerID: docker://27c9355f64a8e92aebf671bbd27c5238392f5b7d913727b21f3e5039bea5cd7e
exitCode: 255
finishedAt: "2022-07-03T02:46:51Z"
reason: Error
startedAt: "2022-07-03T02:34:05Z"
name: nginx
ready: true
restartCount: 2
started: true
state:
running:
startedAt: "2022-07-03T02:47:05Z"
hostIP: 192.168.79.101
phase: Running
podIP: 10.244.2.4
podIPs:
- ip: 10.244.2.4
qosClass: BestEffort
startTime: "2022-07-01T08:00:15Z"
kubernetes中所有的内容都抽象为资源,可以通过下面的命令进行查看:
kubectl api-resources
经常使用的资源有下面这些:
资源分类 | 资源名称 | 缩写 | 资源作用 |
---|---|---|---|
集群级别资源 | nodes | no | 集群组成部分 |
namespaces | ns | 隔离Pod | |
pod资源 | pods | po | 装载容器 |
pod资源控制器 | replicationcontrollers | rc | 控制pod资源 |
replicasets | rs | 控制pod资源 | |
deployments | deploy | 控制pod资源 | |
daemonsets | ds | 控制pod资源 | |
jobs | 控制pod资源 | ||
cronjobs | cj | 控制pod资源 | |
horizontalpodautoscalers | hpa | 控制pod资源 | |
statefulsets | sts | 控制pod资源 | |
服务发现资源 | services | svc | 统一pod对外接口 |
ingress | ing | 统一pod对外接口 | |
存储资源 | volumeattachments | 存储 | |
persistentvolumes | pv | 存储 | |
persistentvolumeclaims | pvc | 存储 | |
配置资源 | configmaps | cm | 配置 |
secrets | 配置 |
kubernetes允许对资源进行多种操作,可以通过–help查看详细的操作命令
kubectl --help
经常使用的操作有下面这些:
命令分类 | 命令 | 翻译 | 命令作用 |
---|---|---|---|
基本命令 | create | 创建 | 创建一个资源 |
edit | 编辑 | 编辑一个资源 | |
get | 获取 | 获取一个资源 | |
patch | 更新 | 更新一个资源 | |
delete | 删除 | 删除一个资源 | |
explain | 解释 | 展示资源文档 | |
运行和调试 | run | 运行 | 在集群中运行一个指定的镜像 |
expose | 暴露 | 暴露资源为Service | |
describe | 描述 | 显示资源内部信息 | |
logs | 日志输出容器在 pod 中的日志 | 输出容器在 pod 中的日志 | |
attach | 缠绕进入运行中的容器 | 进入运行中的容器 | |
exec | 执行容器中的一个命令 | 执行容器中的一个命令 | |
cp | 复制 | 在Pod内外复制文件 | |
rollout | 首次展示 | 管理资源的发布 | |
scale | 规模 | 扩(缩)容Pod的数量 | |
autoscale | 自动调整 | 自动调整Pod的数量 | |
高级命令 | apply | rc | 通过文件对资源进行配置 |
label | 标签 | 更新资源上的标签 | |
其他命令 | cluster-info | 集群信息 | 显示集群信息 |
version | 版本 | 显示当前Server和Client的版本 |
下面以一个namespace / pod的创建和删除简单演示下命令的使用:
# 创建一个namespace
[root@master ~]# kubectl create namespace test
namespace/test created
# 获取namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 2d
kube-node-lease Active 2d
kube-public Active 2d
kube-system Active 2d
test Active 32s
# 在此namespace下创建并运行一个nginx的Pod
[root@master ~]# kubectl run pod --image=nginx:latest -n dev
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
# 查看新创建的pod
[root@master ~]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
pod-644584df94-45vzt 1/1 Running 0 4m33s
# 删除指定的pod
[root@master ~]# kubectl delete pod pod-644584df94-45vzt -n test
pod "pod-644584df94-45vzt" deleted
# 删除之后 查看pod还存在一个新的,这就是pod控制器新创建的,需要直接删除该命名空间,该空间下的pod就会被删除
[root@master ~]# kubectl get pod -n test
NAME READY STATUS RESTARTS AGE
pod-644584df94-tt8c4 1/1 Running 0 19s
# 删除指定的namespace (ns 为namespace的缩写)
[root@master ~]# kubectl delete ns test
namespace "test" deleted
# 练习2
[root@master ~]# kubectl create namespace test2
namespace/test2 created
[root@master ~]# kubectl run pod --image=tomcat:latest -n test2
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/pod created
[root@master ~]# kubectl get pod -n test2
NAME READY STATUS RESTARTS AGE
pod-7d6ddcbdcb-kl4lh 0/1 ContainerCreating 0 13s
[root@master ~]# kubectl get pod -n test2
NAME READY STATUS RESTARTS AGE
pod-7d6ddcbdcb-kl4lh 1/1 Running 0 25s
[root@master ~]# kubectl delete ns test2
namespace "test" deleted
3.3.2 命令式对象配置
命令式对象配置就是使用命令配合配置文件一起来操作kubernetes
资源。
- 创建一个nginx_pod.yaml,内容如下:
[root@master ~]# vim nginx_pod.yaml
apiVersion: v1
kind: Namespace
metadata:
name: testns
---
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod-new
namespace: testns
spec:
containers:
- name: nginx-containers
image: nginx:latest
- 执行create命令,创建资源:
[root@master ~]# kubectl create -f nginx_pod.yaml
namespace/testns created
pod/nginx-pod-new created
此时发现创建了两个资源对象,分别是namespace和pod
- 执行get命令,查看资源:
[root@master ~]# kubectl get -f nginx_pod.yaml
NAME STATUS AGE
namespace/testns Active 21s
NAME READY STATUS RESTARTS AGE
pod/nginx-pod-new 1/1 Running 0 20s
这样就显示了两个资源对象的信息
- 执行delete命令,删除资源:
[root@master ~]# kubectl delete -f nginx_pod.yaml
namespace "testns" deleted
pod "nginx-pod-new" deleted
此时发现两个资源对象被删除了
总结:
上述的所有创建、查看、删除都是根据yaml文件进行的,k8s会根据yaml文件中的资源类型(namespace、pod等)去查找对应namespace中的pod信息,执行对应的新建 删除 查看等操作。
命令式对象配置的方式操作资源,可以简单的认为:命令 + yaml配置文件(里面是命令需要的各种参数)
3.3.3 声明式对象配置
# 第一次执行时,kubectl apply -f yaml文件,发现创建了资源
[root@master ~]# kubectl apply -f nginx_pod.yaml
namespace/testns created
pod/nginx-pod-new created
# 再次执行一次kubectl apply -f yaml文件,发现说资源没有变动
[root@master ~]# kubectl apply -f nginx_pod.yaml
namespace/testns unchanged
pod/pod/nginx-pod-new unchanged
# 修改一下yaml中pod的名字为 nginx-pod,版本1.17.2 再次运行,发下已经对其进行了更新
[root@master ~]# kubectl apply -f nginx_pod.yaml
namespace/testns unchanged
pod/nginx-pod created
[root@master ~]# kubectl get pods -n testns
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 93s
nginx-pod-new 1/1 Running 0 2m26s
[root@master ~]#
总结: 其实声明式对象配置就是使用apply描述一个资源最终的状态(在yaml中定义状态) 使用apply操作资源:
扩展:kubectl可以在node节点上运行吗 ?
# 在node节点运行,发现运行不了 [root@node1 ~]# kubectl get nodes The connection to the server localhost:8080 was refused - did you specify the right host or port?
kubectl的运行是需要进行配置的,它的配置文件是$HOME/.kube,
scp -r ~/.kube node1:~/
[root@master ~]# scp -r ~/.kube node1:~/
The authenticity of host 'node1 (192.168.79.101)' can't be established. ECDSA key fingerprint is SHA256:aFKR47V4wpGwAGUWwS547whREBh27Qq4Lt/4dfzGCY0. ECDSA key fingerprint is MD5:65:4f:1a:b3:fd:56:a2:26:b6:ad:59:5a:25:c6:0c:bb. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'node1,192.168.79.101' (ECDSA) to the list of known hosts. # 输入node1用户的密码 root@node1's password:
config 100% 5450 5.6MB/s 00:00
6bb6226e0013608a96d9c162c1e451a9 100% 246 382.3KB/s 00:00
e3ab00888cc1b38eddcc3e7ff4f69c02 100% 4308 5.7MB/s 00:00
66a573cf55e1acb226464f270aff07f3 100% 416 378.4KB/s 00:00
aa65089b0b9753f156201b77dd98289a 100% 619 825.9KB/s 00:00
a9c386f06359d6fce9fcfaa882e51b62 100% 618 937.2KB/s 00:00
c6d7236cd5a61ae08352f3999c94343c 100% 506 777.5KB/s 00:00
eccb18774d9d1b514e5035b2ae255f5f 100% 969 1.5MB/s 00:00
f36e6ad8fd14ec9774f3fe4a9d11f054 100% 316 512.0KB/s 00:00
d452561615d6c0d95c78e4e5b6156225 100% 547 849.5KB/s 00:00
3c1eb2d86d97dbfd73ca435f9940fd0d 100% 700 1.1MB/s 00:00
fdc570b125cc1b45648a376027d8f26d 100% 1041 1.6MB/s 00:00
8b3900d078bf09454b2ca594bfd01592 ...
# 拷贝完毕之后,在node1的客户端重新输get nodes 命令,即可查看,同理node2可以同样进行配置
[root@node1 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 2d1h v1.17.4
node1 Ready <none> 2d v1.17.4
node2 Ready <none> 2d v1.17.4
[root@master ~]# scp -r ~/.kube node2:~/
The authenticity of host 'node2 (192.168.79.102)' can't be established. ECDSA key fingerprint is SHA256:2jVscd74FOtSxcyvbxekRyzI6l2W+a03UD13UBAibs0. ECDSA key fingerprint is MD5:25:2c:fc:3d:3d:44:21:28:41:f9:04:23:0d:34:53:73. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'node2,192.168.79.102' (ECDSA) to the list of known hosts. root@node2's password:
config 100% 5450 6.7MB/s 00:00
6bb6226e0013608a96d9c162c1e451a9 100% 246 367.5KB/s 00:00
66a573cf55e1acb226464f270aff07f3 100% 416 691.4KB/s 00:00
aa65089b0b9753f156201b77dd98289a 100% 619 877.2KB/s 00:00
a9c386f06359d6fce9fcfaa882e51b62 100% 618 982.3KB/s 00:00
c6d7236cd5a61ae08352f3999c94343c 100% 506 901.6KB/s 00:00
eccb18774d9d1b514e5035b2ae255f5f 100% 969 1.4MB/s 00:00
...
# 拷贝完毕,在node2节点命令行输入
[root@node2 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready master 2d1h v1.17.4
node1 Ready <none> 2d v1.17.4
node2 Ready <none> 2d v1.17.4
-
创建/更新资源 使用声明式对象配置 kubectl apply -f XXX.yaml
-
删除资源 使用命令式对象配置 kubectl delete -f XXX.yaml
-
查询资源 使用命令式对象管理 kubectl get(describe) 资源名称
4、实战入门
主要介绍如何在kubernetes集群中部署一个nginx服务,服务相关的名词介绍,能够对其进行访问
4.1 Namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现或者。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
kubernetes在集群启动之后,会默认创建4个namespace:
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 6d6h # 所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease Active 6d6h # 集群节点之间的心跳维护,v1.13开始引入
kube-public Active 6d6h # 此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system Active 6d6h # 所有由Kubernetes系统创建的资源都处于这个命名空间
[root@master ~]#
1. 查看集群下所有的namespace: kubectl get namespace(可简写为ns)
[root@master ~]# kubectl get namespace NAME STATUS AGE default Active 6d6h kube-node-lease Active 6d6h kube-public Active 6d6h kube-system Active 6d6h [root@master ~]# kubectl get ns NAME STATUS AGE default Active 6d6h kube-node-lease Active 6d6h kube-public Active 6d6h kube-system Active 6d6h
2. 查看指定的namespace kubectl get namespace 名字 -o 参数
指定输出格式:支持的参数格式包括:yaml json,wide等
[root@master ~]# kubectl get ns default -o wide [root@master ~]# kubectl get ns default -o yaml [root@master ~]# kubectl get ns default -o json ```
# 3. 查看指定命名空间的具体信息
[root@master ~]# kubectl describe ns kube-system
Name: kube-system
Labels: <none>
Annotations: <none>
Status: Active # Active 命名空间正在使用中 Terminating 正在删除命名空间
No resource quota. # ResourceQuota 针对namespace做的资源限制
No LimitRange resource. # LimitRange针对namespace中的每个组件做的资源限制
-
# 创建 kubectl create ns 名字 [root@master ~]# kubectl create ns dev1 namespace/dev1 created [root@master ~]# kubectl get ns dev1 NAME STATUS AGE dev1 Active 18s
-
# 删除命名空间 kubectl delete ns 名字 [root@master ~]# kubectl delete ns dev1 namespace "dev1" deleted [root@master ~]# kubectl get ns dev1 Error from server (NotFound): namespaces "dev1" not found [root@master ~]#
首先准备一个yaml文件:ns-dev1.yaml
apiVersion: v1
kind: Namespace
metadata:
name: dev1
# 创建
[root@master ~]# kubectl create -f ns-dev1.yaml
namespace/dev1 created
[root@master ~]# kubectl get ns dev1
NAME STATUS AGE
dev1 Active 8s
# 删除
[root@master ~]# kubectl delete -f ns-dev1.yaml
namespace "dev1" deleted
[root@master ~]# kubectl get ns dev1
Error from server (NotFound): namespaces "dev1" not found
[root@master ~]#
4.2 Pod
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。一个Pod中可以存在一个或者多个容器。
kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的。对于pod的一些列操作命令:
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-9d85f5447-4r5vf 1/1 Running 2 6d6h
coredns-9d85f5447-r9k4g 1/1 Running 2 6d6h
etcd-master 1/1 Running 4 6d6h
kube-apiserver-master 1/1 Running 4 6d6h
kube-controller-manager-master 1/1 Running 4 6d6h
kube-flannel-ds-298ct 1/1 Running 4 6d6h
kube-flannel-ds-z6whb 1/1 Running 3 6d6h
kube-flannel-ds-zl4mx 1/1 Running 2 6d6h
kube-proxy-9m6xw 1/1 Running 4 6d6h
kube-proxy-mhssb 1/1 Running 2 6d6h
kube-proxy-mnn62 1/1 Running 3 6d6h
kube-scheduler-master 1/1 Running 4 6d6h
[root@master ~]#
- 创建并运行pod
#1. 先创建一个命名空间:dev
[root@master ~]# kubectl create ns dev1
namespace/dev1 created
# 2.创建并运行pod
# 命令格式: kubectl run (pod控制器名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace dev1
kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/nginx created
- 查看pod信息
# 查看pod信息
[root@master ~]# kubectl get pods -n dev1
NAME READY STATUS RESTARTS AGE
nginx-dd6b5d745-qfknr 1/1 Running 0 100s
# 查看pod的详细信息
[root@master ~]# kubectl describe pod nginx -n dev1
Name: nginx-dd6b5d745-qfknr
Namespace: dev1
Priority: 0
Node: node2/192.168.79.102
Start Time: Thu, 07 Jul 2022 22:27:16 +0800
Labels: pod-template-hash=dd6b5d745
run=nginx
Annotations: <none>
Status: Running
IP: 10.244.1.16
IPs:
IP: 10.244.1.16
Controlled By: ReplicaSet/nginx-dd6b5d745
Containers:
nginx:
Container ID: docker://5a4558ea6b802d5380c6aa51ef396541bff6a41d712b02dddd1109b1eb919592
Image: nginx:latest
Image ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Port: 80/TCP
Host Port: 0/TCP
State: Running
Started: Thu, 07 Jul 2022 22:27:18 +0800
Ready: True
Restart Count: 0
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-mnmkq (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-mnmkq:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-mnmkq
Optional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300s
node.kubernetes.io/unreachable:NoExecute for 300s
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m37s default-scheduler Successfully assigned dev1/nginx-dd6b5d745-qfknr to node2
Normal Pulling 3m36s kubelet, node2 Pulling image "nginx:latest"
Normal Pulled 3m35s kubelet, node2 Successfully pulled image "nginx:latest"
Normal Created 3m35s kubelet, node2 Created container nginx
Normal Started 3m35s kubelet, node2 Started container nginx
- 获取pod的ip进行访问
# 获取pods的格式化展示
[root@master ~]# kubectl get pods -n dev1 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dd6b5d745-qfknr 1/1 Running 0 8m9s 10.244.1.16 node2
# 访问 curl http://10.244.1.16:80
[root@master ~]# curl http://10.244.1.16:80
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html {
color-scheme: light dark; }
body {
width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@master ~]#
-
删除pod
# 删除指定Pod [root@master ~]# kubectl delete pod nginx -n dev1 Error from server (NotFound): pods "nginx" not found [root@master ~]# kubectl get pods -n dev1 NAME READY STATUS RESTARTS AGE nginx-dd6b5d745-qfknr 1/1 Running 0 12m [root@master ~]# kubectl delete pod nginx-dd6b5d745-qfknr -n dev1 pod "nginx-dd6b5d745-qfknr" deleted # 此时,显示删除Pod成功,但是再查询,发现又新产生了一个 [root@master ~]# kubectl get pods -n dev1 NAME READY STATUS RESTARTS AGE nginx-dd6b5d745-tqlt8 1/1 Running 0 19s # 这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建 # 此时要想删除Pod,必须删除Pod控制器(控制器内容稍后学习) # 先来查询一下当前namespace下的Pod控制器 [root@master ~]# kubectl get deploy -n dev1 NAME READY UP-TO-DATE AVAILABLE AGE nginx 1/1 1 1 13m # 接下来,删除此PodPod控制器 [root@master ~]# kubectl delete deploy nginx -n dev1 deployment.apps "nginx" deleted # 稍等片刻,再查询Pod,发现Pod被删除了(控制器被删除了,所控制的pod自然就被删除干净了) [root@master ~]# kubectl get pods -n dev No resources found in dev namespace. [root@master ~]#
创建一个pod-nginx1.yaml,内容如下:
apiVersion: v1 kind: Pod metadata: name: nginx namespace: dev1 spec: containers: 标签:
c08连接器fce连接器m33连接器