K8s(资源管理,namespace,Pod)
介绍
在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes。
kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务,所谓的部署服务,其实就是在kubernetes集群中运行一个个的容器,并将指定的程序跑在容器中。
kubernetes的最小管理单元是pod而不是容器,所以只能将容器放在Pod
中,而kubernetes一般也不会直接管理Pod,而是通过Pod控制器
来管理Pod的。
Pod可以提供服务之后,就要考虑如何访问Pod中服务,kubernetes提供了Service
资源实现这个功能。
当然,如果Pod中程序的数据需要持久化,kubernetes还提供了各种存储
系统。
YAML语言介绍
YAML是一个类似 XML、JSON 的标记性语言。它强调以数据为中心,并不是以标识语言为重点。因而YAML本身的定义比较简单,号称"一种人性化的数据格式语言"。
<xiaowang><age>21</age><address>Beijing</address>
</heima>
xiaowang:age: 21address: 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: xiaowang # 简单写法,直接写值 , 如果字符串中间有特殊字符,必须使用双引号或者单引号包裹
c8: line1line2 # 字符串过多的情况可以拆成多行,每一行会被转化成一个空格
# 对象
# 形式一(推荐):
xiaowang:age: 21address: Beijing
# 形式二(了解):
xiaowang: {age: 21,address: Beijing}
# 数组
# 形式一(推荐):
address:- 成都- 深圳
# 形式二(了解):
address: [成都,深圳]
k8s资源管理的方式
- 命令式对象管理:直接使用命令去操作kubernetes资源
# kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool][--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
[root@master ~]# kubectl run nginx-pod --image=nginx:1.17.1 --port=80
- 命令式对象配置:通过命令配置和配置文件去操作kubernetes资源
kubectl create/patch -f nginx-pod.yaml
- 声明式对象配置:通过apply命令和配置文件去操作kubernetes资源(支持对一个目录下的所有文件yaml文件进行操作)
kubectl apply -f nginx-pod.yaml
kubectl apply -f ./
k8s的资源类型
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 | 配置 |
经常使用的操作有下面这些:
- 创建一个namespace
[root@master ~]# kubectl create namespace dev
namespace/dev created
- 获取namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 9h
dev Active 28s
kube-node-lease Active 9h
kube-public Active 9h
kube-system Active 9h
- 在此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 dev
NAME READY STATUS RESTARTS AGE
pod-644584df94-rxczl 1/1 Running 0 34s
- 删除指定的pod
[root@master ~]# kubectl delete pods pod-644584df94-rxczl -n dev
pod "pod-644584df94-rxczl" deleted
- 删除指定的namespace
[root@master ~]# kubectl delete ns dev
"dev" deletednamespace "dev" deleted
命令式对象配置(yaml文件格式)
- 创建一个pod-nginx.yaml
# 先创建一个为dev的namespace,然后在namespace中创建一个带有nginx服务的Pod
apiVersion: v1
kind: Namespace
metadata:name: dev---apiVersion: v1
kind: Pod
metadata:name: nginxpodnamespace: dev
spec:containers:- name: nginx-containersimage: nginx:latest
- 执行create命令,创建资源:
[root@master ~]# kubectl create -f nginxpod.yaml
namespace/dev created
pod/nginxpod created
- 执行get命令,查看资源
[root@master ~]# kubectl get -f pod-nginx.yaml
NAME STATUS AGE
namespace/dev Active 10sNAME READY STATUS RESTARTS AGE
pod/nginxpod 1/1 Running 0 9s
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginxpod 1/1 Running 0 27s
- 执行delete命令,删除资源
[root@master ~]# kubectl delete -f pod-nginx.yaml
namespace "dev" deleted
pod "nginxpod" deleted
namespace
Namespace是kubernetes系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多租户的资源隔离。
默认情况下,kubernetes集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互相的访问,那此时就可以将两个Pod划分到不同的namespace下。kubernetes通过将集群内部的资源分配到不同的Namespace中,可以形成逻辑上的"组",以方便不同的组的资源进行隔离使用和管理。
可以通过kubernetes的授权机制,将不同的namespace交给不同租户进行管理,这样就实现了多租户的资源隔离。此时还能结合kubernetes的资源配额机制,限定不同租户能占用的资源,例如CPU使用量、内存使用量等等,来实现租户可用资源的管理。
- 集群启动之后,会默认创建几个namespace
[root@master ~]# kubectl get namespace
NAME STATUS AGE
default Active 45h # 所有未指定Namespace的对象都会被分配在default命名空间
kube-node-lease Active 45h # 集群节点之间的心跳维护,v1.13开始引入
kube-public Active 45h # 此命名空间下的资源可以被所有人访问(包括未认证用户)
kube-system Active 45h # 所有由Kubernetes系统创建的资源都处于这个命名空间
- 查看所有的namespace
[root@master ~]# kubectl get ns
NAME STATUS AGE
default Active 13h
kube-node-lease Active 13h
kube-public Active 13h
kube-system Active 13h
- 查看指定的namespace
[root@master ~]# kubectl get ns kube-system
NAME STATUS AGE
kube-system Active 13h
- 指定输出格式
kubernetes支持的格式有很多,比较常见的是wide、json、yaml
命令:kubectl get ns ns名称 -o 格式参数
[root@master ~]# kubectl get ns default -o yaml
apiVersion: v1
kind: Namespace
metadata:creationTimestamp: "2022-05-08T15:49:06Z"name: defaultresourceVersion: "146"selfLink: /api/v1/namespaces/defaultuid: 432c901d-bd6d-4d6c-af80-184403dc1f30
spec:finalizers:- kubernetes
status:phase: Active
- 查看namespace详情
查看ns详情 命令:kubectl describe ns ns名称
[root@master ~]# kubectl describe ns default
Name:
- 创建一个namespace
[root@master ~]# kubectl create ns dev
namespace/dev created
- 删除一个namespace
[root@master ~]# kubectl delete ns dev
namespace "dev" deleted
- yaml文件配置
[root@master ~]# cat namespace.yaml
apiVersion: v1
kind: Namespace
metadata:name: dev
# 创建一个namespace
[root@master ~]# kubectl create -f namespace.yaml
namespace/dev created
# 删除一个namespace
[root@master ~]# kubectl delete -f namespace.yaml
namespace "dev" deleted
Pod
Pod是kubernetes集群进行管理的最小单元,程序要运行必须部署在容器中,而容器必须存在于Pod中。
Pod可以认为是容器的封装,一个Pod中可以存在一个或者多个容器。
kubernetes在集群启动之后,集群中的各个组件也都是以Pod方式运行的!
[root@master ~]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-9d85f5447-tfs4f 0/1 Running 1 13h
coredns-9d85f5447-zzvn2 0/1 Running 1 13h
etcd-master 1/1 Running 2 13h
kube-apiserver-master 1/1 Running 2 13h
kube-controller-manager-master 1/1 Running 2 13h
kube-flannel-ds-94qzl 1/1 Running 1 13h
kube-flannel-ds-cv6nz 1/1 Running 1 13h
kube-flannel-ds-l9l9t 1/1 Running 1 13h
kube-proxy-hmlgc 1/1 Running 1 13h
kube-proxy-v2mck 1/1 Running 2 13h
kube-proxy-zp2g5 1/1 Running 1 13h
kube-scheduler-master 1/1 Running 2 13h
创建并运行pod
命令格式: kubectl run (pod控制器名称) [参数]
# --image 指定Pod的镜像
# --port 指定端口
# --namespace 指定namespace
[root@master ~]# kubectl run nginx --image=nginx:latest --port=80 --namespace 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/nginx created
查看pod信息
# 查看pod的基本信息
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginx-dd6b5d745-ggw95 1/1 Running 0 47s
[root@master ~]# kubectl get pods -n dev -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dd6b5d745-ggw95 1/1 Running 0 63s 10.20.1.7 node01 <none> <none>
## 查看Pod的详细信息
[root@master ~]# kubectl describe pods -n dev
Name: nginx-dd6b5d745-ggw95
Namespace: dev
Priority: 0
Node: node01/192.168.0.18
Start Time: Mon, 09 May 2022 13:05:04 +0800
Labels: pod-template-hash=dd6b5d745run=nginx
Annotations: <none>
Status: Running
IP: 10.20.1.7
IPs:IP: 10.20.1.7
Controlled By: ReplicaSet/nginx-dd6b5d745
Containers:nginx:Container ID: docker://f9f03c480229a7f5b715d69758cd420ab9c8853f5dd9004cad0c7c25d81d319dImage: nginx:latestImage ID: docker-pullable://nginx@sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31Port: 80/TCPHost Port: 0/TCPState: RunningStarted: Mon, 09 May 2022 13:05:06 +0800Ready: TrueRestart Count: 0Environment: <none>Mounts:/var/run/secrets/kubernetes.io/serviceaccount from default-token-m6twv (ro)
Conditions:Type StatusInitialized TrueReady TrueContainersReady TruePodScheduled True
Volumes:default-token-m6twv:Type: Secret (a volume populated by a Secret)SecretName: default-token-m6twvOptional: false
QoS Class: BestEffort
Node-Selectors: <none>
Tolerations: node.kubernetes.io/not-ready:NoExecute for 300snode.kubernetes.io/unreachable:NoExecute for 300s
Events:Type Reason Age From Message---- ------ ---- ---- -------Normal Scheduled 73s default-scheduler Successfully assigned dev/nginx-dd6b5d745-ggw95 to node01Normal Pulling 72s kubelet, node01 Pulling image "nginx:latest"Normal Pulled 71s kubelet, node01 Successfully pulled image "nginx:latest"Normal Created 71s kubelet, node01 Created container nginxNormal Started 71s kubelet, node01 Started container nginx
访问Pod
[root@master ~]# curl http://10.20.1.7: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>
删除指定Pod
# 删除指定的Pod
[root@master ~]# kubectl delete pods nginx-dd6b5d745-ggw95 -n dev
pod "nginx-dd6b5d745-ggw95" deleted# 此时,显示删除Pod成功,但是再查询,发现又新产生了一个
[root@master ~]# kubectl get pods -n dev
NAME READY STATUS RESTARTS AGE
nginx-dd6b5d745-lm4t5 1/1 Running 0 58s
这是因为当前Pod是由Pod控制器创建的,控制器会监控Pod状况,一旦发现Pod死亡,会立即重建!此时要想删除Pod,必须删除Pod控制器
# 先来查询一下当前namespace下的Pod控制器
[root@master ~]# kubectl get deploy -n dev
NAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 7m31s
# 删除此PodPod控制器
[root@master ~]# kubectl delete deploy nginx -n dev
deployment.apps "nginx" deleted
# 查询Pod,发现Pod被删除了
[root@master ~]# kubectl get pods -n dev
No resources found in dev namespace.
yaml配置操作
创建一个pod-nginx.yaml文件,
apiVersion: v1
kind: Pod
metadata:name: nginxnamespace: dev
spec:containers:- image: nginx:latestname: podports:- name: nginx-portcontainerPort: 80protocol: TCP
- 执行命令
创建:kubectl create -f pod-nginx.yaml删除:kubectl delete -f pod-nginx.yaml
K8s(资源管理,namespace,Pod)相关推荐
- Pod资源管理(pod容器分类,k8s添加harbor私库,上传下载私库)
Pod资源管理 了解pod Pod容器分类: 1:infrastructure container 基础容器:维护整个Pod网络空间 2:initcontainers 初始化容器 3:containe ...
- CC00229.CloudKubernetes——|KuberNetes细粒度权限控制.V13|——|Ratel.v01|k8s资源管理平台部署|
一.k8s资源管理平台Ratel ### --- ratel官方hub地址:~~~ https://github.com/dotbalo/ratel-doc 二.安装Ratel ### --- 创建s ...
- [k8s] 第三章 k8s 资源管理
本章节主要介绍yaml语法和kubernetes的资源管理方式 资源管理介绍 在kubernetes中,所有的内容都抽象为资源,用户需要通过操作资源来管理kubernetes. kubernete ...
- k8s核心概念pod 基本定义和命令
文章目录 工作负载 pod定义 pod分类 关系 静态pod 控制器管理的pod 镜像拉取策略 pod常用命令 创建pod 查看pod 删除pod 删除单个pod 删除多个pod pod的标签命令 查 ...
- K8S中的pod、services、容器的概念和区别
K8S中的pod.services.容器的概念和区别 k8s的部署架构 kubernetes中有两类资源,分别是master和nodes,master和nodes上跑的服务如下图: 1 kube-ap ...
- K8S集群Pod资源自动扩缩容方案
K8S集群Pod资源自动扩缩容方案 1.为什么要是有自动扩缩容 在K8S集群中部署的应用程序都是以Pod的形式部署的,我们在部署Pod资源时都会指定Pod资源的副本数,但是这个数量是写死的,平时可能启 ...
- 【K8S系列】Pod重启策略及重启可能原因
目录 1 重启策略 1.1 Always 1.2 OnFailure 1.3 Nerver 1.4 yaml示例 2 Pod常见异常状态 2.1 Pending状态 2.2 Waiting/Con ...
- k8s资源管理命令与Namespace使用详解
目录 一.前言 二.k8s概述 三.k8s常用操作管理命令 3.1 kubectl 命令用法 3.2 常用控制台管理命
- Kubernetes学习总结(8)—— Kubernetes Pod 资源管理 和 Pod 服务质量
一.Pod 资源管理 1.1.resource 的定义 容器运行过程中需要分配所需的资源,如何与 cggroup 联动配合呢?答案是通过定义resource来实现资源的分配,资源的分配单位主要是 cp ...
- Rancher k8s 资源管理
cgroup 简介 控制群组 (control group)(简称cgroup) 是 Linux kernel 的一项功能.从使用的角度看,cgroup 是一个目录树结构,目录中可以创建多层子目录,这 ...
最新文章
- python详细安装教程3.7.4-python 3.7.4 安装 opencv的教程
- [Android]反编译apk + eclipse中调试smali
- wp-login.php 404页面,wordpress隐藏后台登陆界面,自动跳转首页或404
- C#中深拷贝对象的简单方法
- Vue.js 学习视频和书籍【推荐】
- java cr_WildFly 10 CR 2发布– Java EE 7,Java 8,Hibernate 5,JavaScript支持热重载
- 的图片怎么循环渲染_十分钟教你做个炫酷的图片切换过度效果
- UIImagePickerController拍照与摄像
- linux ssh远程无密码登陆无效
- 一篇好奇心文,带你看懂基金的运营全貌
- python help 函数_python怎么用help函数
- 吴恩达机器学习视频学习笔记(3)
- 报修管理系统微信小程序源码
- 已解决-Windows10没有windows照片查看器-Windows10打开照片是黑底的
- 微信小程序——推箱子小游戏
- c#调用触滑输入法实现触摸屏键盘功能
- 学python就业好吗_Python就业行情怎么样?Python好学吗?
- java设置post超时时间_HttpClient 如何设置超时时间
- java实现基金浮动_Java: 实现自回归分析/线性回归分析/基金各项指标计算等
- JavaScript 一些小妙用
热门文章
- navicat12No All Pattern Found!File Already Patched。
- NFT平台开发部署应该选择哪条区块链?
- FlashPaper 2 API 中文版
- js Tree(梅花雪)最简单的例子(来字MEIZZ)
- FFFfrance博客介绍
- win7默认网关不可用_win7系统提示rpc服务器不可用怎么办【详解】
- 计算机会议等级排名,中国计算机学会推荐国际学术期刊(搬运于中国计算机学会)
- I2C总线中8bit和10bit有什么区别
- 专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用
- 鸽子的迷信行为(pigeon superstition)