2.K8S的核心资源管理方法
目录
1.1陈述式资源管理方法
1.1.1.管理名称空间资源
1.1.2.管理Deployment资源
1.1.3.管理Service资源
1.1.4.kubectl用法总结
1.2.声明式资源管理方法
1.1.1.管理名称空间资源
查看名称空间
[root@hdss7- ~]# kubectl get namespace
NAME STATUS AGE
default Active 4d19h
kube-node-lease Active 4d19h
kube-public Active 4d19h
kube-system Active 4d19h
[root@hdss7-21 ~]# kubectl get ns
NAME STATUS AGE
default Active 4d19h
kube-node-lease Active 4d19h
kube-public Active 4d19h
kube-system Active 4d19h
查看名称空间内的资源
[root@hdss7- ~]# kubectl get all -n default
NAME READY STATUS RESTARTS AGE
pod/nginx-ds-7hg9l / Running 3d18h
pod/nginx-ds-tnhsg / Running 3d18h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 192.168.0.1 <none> /TCP 4d19h NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
daemonset.apps/nginx-ds <none> 3d18h
创建名称空间
[root@hdss7- ~]# kubectl create namespace app
namespace/app created
[root@hdss7- ~]# kubectl get namespace
NAME STATUS AGE
app Active 35s
default Active 4d20h
kube-node-lease Active 4d20h
kube-public Active 4d20h
kube-system Active 4d20h
删除名称空间
[root@hdss7- ~]# kubectl delete ns app
namespace "app" deleted
[root@hdss7- ~]# kubectl get ns
NAME STATUS AGE
default Active 4d20h
kube-node-lease Active 4d20h
kube-public Active 4d20h
kube-system Active 4d20h
1.1.2.管理Deployment资源
创建deployment
[root@hdss7-21 ~]# kubectl create deployment nginx-dp --image=harbor.fx.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nginx-dp created
查看deployment
- 简单查看
[root@hdss7- ~]# kubectl get deployment -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp / 56s
- 扩展查看
[root@hdss7- ~]# kubectl get deployment -n kube-public -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-dp / 20m nginx harbor.fx.com/public/nginx:v1.7.9 app=nginx-dp
- 详细查看
[root@hdss7- ~]# kubectl describe deployment nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
CreationTimestamp: Mon, Jun :: +
Labels: app=nginx-dp
Annotations: deployment.kubernetes.io/revision:
Selector: app=nginx-dp
Replicas: desired | updated | total | available | unavailable
StrategyType: RollingUpdate
MinReadySeconds:
RollingUpdateStrategy: % max unavailable, % max surge
Pod Template:
Labels: app=nginx-dp
Containers:
nginx:
Image: harbor.fx.com/public/nginx:v1.7.9
Port: <none>
Host Port: <none>
Environment: <none>
Mounts: <none>
Volumes: <none>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-dp-6f4ddd775 (/ replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 6m31s deployment-controller Scaled up replica set nginx-dp-6f4ddd775 to
查看pod资源
- 简单查找
[root@hdss7- ~]# kubectl get pods -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-6f4ddd775-98dbq / Running 107m
- 扩展查找
[root@hdss7- ~]# kubectl get pods -n kube-public -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-dp-6f4ddd775-98dbq / Running 108m 172.7.21.3 hdss7-.host.com <none> <none>
- 扩展查找
[root@hdss7- ~]# kubectl describe pods nginx-dp-6f4ddd775-98dbq -n kube-public
Name: nginx-dp-6f4ddd775-98dbq
Namespace: kube-public
Priority:
Node: hdss7-.host.com/10.4.7.21
Start Time: Mon, Jun :: +
Labels: app=nginx-dp
pod-template-hash=6f4ddd775
Annotations: <none>
Status: Running
IP: 172.7.21.3
Controlled By: ReplicaSet/nginx-dp-6f4ddd775
Containers:
nginx:
Container ID: docker://93213abdbfb595ebe213c6764f0af4932a40c2ceaa5efc562fac9f2cde5b69fe
Image: harbor.fx.com/public/nginx:v1.7.9
Image ID: docker-pullable://harbor.fx.com/public/nginx@sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2
Port: <none>
Host Port: <none>
State: Running
Started: Mon, Jun :: +
Ready: True
Restart Count:
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-zld8g (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-zld8g:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-zld8g
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: <none>
进入pod资源
[root@hdss7- ~]# kubectl exec -it nginx-dp-6f4ddd775-98dbq /bin/bash -n kube-public
root@nginx-dp-6f4ddd775-98dbq:/#
注:也可以使用docker exec进入容器
删除pod资源(重启)
[root@hdss7- ~]# kubectl delete pods nginx-dp-6f4ddd775-98dbq -n kube-public
pod "nginx-dp-6f4ddd775-98dbq" deleted
强制删除参数: --force-grace-period=0
删除deployment
[root@hdss7- ~]# kubectl delete deployment nginx-dp -n kube-public
deployment.extensions "nginx-dp" deleted
[root@hdss7-21 ~]# kubectl get deployment -n kube-public
No resources found.
[root@hdss7-21 ~]# kubectl get pods -n kube-public
No resources found.
1.1.3 管理Service资源
创建Service
[root@hdss7- ~]# kubectl create deployment nginx-dp --image=harbor.fx.com/public/nginx:v1.7.9 -n kube-public
deployment.apps/nginx-dp created
[root@hdss7- ~]# kubectl expose deployment nginx-dp --port= -n kube-public
service/nginx-dp exposed
[root@hdss7- ~]# kubectl scale deployment nginx-dp --replicas= -n kube-public
deployment.extensions/nginx-dp scaled
[root@hdss7- ~]# ipvsadm -Ln
IP Virtual Server version 1.2. (size=)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.1: nq
-> 10.4.7.21: Masq
-> 10.4.7.22: Masq
TCP 192.168.164.107: nq
-> 172.7.21.3: Masq
-> 172.7.22.3: Masq
[root@hdss7- ~]# kubectl get service -n kube-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.164.107 <none> /TCP 6m54s
查看service
[root@hdss7- ~]# kubectl describe service nginx-dp -n kube-public
Name: nginx-dp
Namespace: kube-public
Labels: app=nginx-dp
Annotations: <none>
Selector: app=nginx-dp
Type: ClusterIP
IP: 192.168.164.107
Port: <unset> /TCP
TargetPort: /TCP
Endpoints: 172.7.22.3:
Session Affinity: None
Events: <none>
1.1.4.kubectl用法总结
陈述式资源管理方法小结:
- kubernetes集群管理集群的唯一入口是通过相应的方法调用apiserver的接口。
- kubectl是官方的CLI命令行工具,用于与apiserver进行通信,将用户在命令行输入的命令,组织并转化为apiserver能识别的信息,进而实现管理K8S各种资源的一种有效途径。
- kubectl的命令大全
- kubectl --help
- http://docs.kubernetes.org.cn/683.html
- 陈述式资源管理方法可以满足90%以上的资源管理需求,但它的缺点也很明显
- 命令冗长、复杂、难以记忆。
- 特定场景下,无法实现管理需求。
- 对资源的增、删、查操作比较容易,改就很痛苦。
1.2.声明式资源管理方法
声明式资源管理方法依赖于一资源配置清单(yaml/json)
查看资源配置清单的方法
[root@hdss7- ~]# kubectl get pods nginx-dp-6f4ddd775-x9hjg -o yaml -n kube-public
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-06-08T05:56:16Z"
generateName: nginx-dp-6f4ddd775-
labels:
app: nginx-dp
pod-template-hash: 6f4ddd775
name: nginx-dp-6f4ddd775-x9hjg
namespace: kube-public
ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-dp-6f4ddd775
uid: 872e6838-b8ef-4a6a-8cb2-98a94dca0c91
resourceVersion: ""
selfLink: /api/v1/namespaces/kube-public/pods/nginx-dp-6f4ddd775-x9hjg
uid: 7a04423c-add2-45ee--c6e80545cb9a
spec:
containers:
- image: harbor.fx.com/public/nginx:v1.7.9
imagePullPolicy: IfNotPresent
name: nginx
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/run/secrets/kubernetes.io/serviceaccount
name: default-token-zld8g
readOnly: true
dnsPolicy: ClusterFirst
enableServiceLinks: true
nodeName: hdss7-.host.com
priority:
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
serviceAccount: default
serviceAccountName: default
terminationGracePeriodSeconds:
tolerations:
- effect: NoExecute
key: node.kubernetes.io/not-ready
operator: Exists
tolerationSeconds:
- effect: NoExecute
key: node.kubernetes.io/unreachable
operator: Exists
tolerationSeconds:
volumes:
- name: default-token-zld8g
secret:
defaultMode:
secretName: default-token-zld8g
status:
conditions:
- lastProbeTime: null
lastTransitionTime: "2020-06-08T05:56:16Z"
status: "True"
type: Initialized
- lastProbeTime: null
lastTransitionTime: "2020-06-08T05:56:17Z"
status: "True"
type: Ready
- lastProbeTime: null
lastTransitionTime: "2020-06-08T05:56:17Z"
status: "True"
type: ContainersReady
- lastProbeTime: null
lastTransitionTime: "2020-06-08T05:56:16Z"
status: "True"
type: PodScheduled
containerStatuses:
- containerID: docker://f5e7ac3cef3c1439df242cc2519ca22c7b942ec44099ffdd0258fed05a075dea
image: harbor.fx.com/public/nginx:v1.7.9
imageID: docker-pullable://harbor.fx.com/public/nginx@sha256:b1f5935eb2e9e2ae89c0b3e2e148c19068d91ca502e857052f14db230443e4c2
lastState: {}
name: nginx
ready: true
restartCount:
state:
running:
startedAt: "2020-06-08T05:56:17Z"
hostIP: 10.4.7.22
phase: Running
podIP: 172.7.22.3
qosClass: BestEffort
startTime: "2020-06-08T05:56:16Z" [root@hdss7- ~]# kubectl get svc nginx-dp -o yaml -n kube-public
apiVersion: v1
kind: Service
metadata:
creationTimestamp: "2020-06-08T05:58:22Z"
labels:
app: nginx-dp
name: nginx-dp
namespace: kube-public
resourceVersion: ""
selfLink: /api/v1/namespaces/kube-public/services/nginx-dp
uid: df2f2bd9-bfa7-4cdb-b25b-1488e63944a9
spec:
clusterIP: 192.168.164.107
ports:
- port:
protocol: TCP
targetPort:
selector:
app: nginx-dp
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
解释资源配置清单
[root@hdss7-21 ~]# kubectl explain service
创建资源配置清单
[root@hdss7- ~]# vim nginx-ds.yaml
apiVersion: v1
kind: Service
metadata:
labels:
nginx: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port:
protocol: TCP
targetPort:
selector:
app: nginx-ds
type: ClusterIP
应用资源配置清单
[root@hdss7- ~]# kubectl create -f nginx-ds.yaml
service/nginx-ds configured
[root@hdss7- ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.0.1 <none> /TCP 5d1h
nginx-ds ClusterIP 192.168.100.178 <none> /TCP 8m54s
修改资源配置清单
- 离线修改
[root@hdss7- ~]# docker login docker.io
[root@hdss7- ~]# docker pull fangxing1001/nginx:curl
[root@hdss7- ~]# vim nginx-ds.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-test
spec:
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: mynginx
image: harbor.fx.com/public/nginx:v1.7.9
ports:
- containerPort:
[root@hdss7- ~]# kubectl apply -f nginx-ds.yaml
deployment.extensions/nginx-test created
[root@hdss7- ~]# vim nginx-ds.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-test
spec:
template:
metadata:
labels:
app: nginx-test
spec:
containers:
- name: mynginx
image: harbor.fx.com/public/nginx:curl
ports:
- containerPort:
[root@hdss7- ~]# kubectl apply -f nginx-ds.yaml
deployment.extensions/nginx-test configured
[root@hdss7- ~]# kubectl describe pods nginx-test-655f555749-wwbnp
Name: nginx-test-655f555749-wwbnp
Namespace: default
Priority:
Node: hdss7-.host.com/10.4.7.22
Start Time: Mon, Jun :: +
Labels: app=nginx-test
pod-template-hash=655f555749
Annotations: <none>
Status: Running
IP: 172.7.22.4
Controlled By: ReplicaSet/nginx-test-655f555749
Containers:
mynginx:
Container ID: docker://35a16c22463b9ff05adb69bb2f3665c316c58de657ab01f9c9f63896d0d1c3f0
Image: harbor.fx.com/public/nginx:curl
Image ID: docker-pullable://harbor.fx.com/public/nginx@sha256:75f7e3c69bb839f8400adbca228bce8b7e5bc3e9bce2ff1bb543094b82337e16
Port: /TCP
Host Port: /TCP
State: Running
Started: Mon, Jun :: +
Ready: True
Restart Count:
Environment: <none>
Mounts:
/var/run/secrets/kubernetes.io/serviceaccount from default-token-zkqff (ro)
Conditions:
Type Status
Initialized True
Ready True
ContainersReady True
PodScheduled True
Volumes:
default-token-zkqff:
Type: Secret (a volume populated by a Secret)
SecretName: default-token-zkqff
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 3m13s default-scheduler Successfully assigned default/nginx-test-655f555749-wwbnp to hdss7-.host.com
Normal Pulling 3m11s kubelet, hdss7-.host.com Pulling image "harbor.fx.com/public/nginx:curl"
Normal Pulled 3m4s kubelet, hdss7-.host.com Successfully pulled image "harbor.fx.com/public/nginx:curl"
Normal Created 3m4s kubelet, hdss7-.host.com Created container mynginx
Normal Started 3m4s kubelet, hdss7-.host.com Started container mynginx
- 在线修改
[root@hdss7- ~]# kubectl edit svc nginx-ds
service/nginx-ds edited
[root@hdss7- ~]# kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 192.168.0.1 <none> /TCP 5d1h
nginx-ds ClusterIP 192.168.100.178 <none> /TCP 16m
删除资源
[root@hdss7- ~]# kubectl delete -f nginx-ds.yaml
deployment.extensions "nginx-test" deleted
[root@hdss7- ~]# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-ds-7hg9l / Running 4d1h
nginx-ds-tnhsg / Running 4d1h
声明资源管理方法小结:
- 声明式资源管理方法,依赖于统一资源配置清单文件对资源进行管理。
- 对资源的管理,是通过事先定义在统一资源配置清单内,再通过陈述式命令应用到K8S集群里。
- 语法格式:kubectl create/apply/delete -f /path/to/yaml
2.K8S的核心资源管理方法的更多相关文章
- 体验 k8s 的核心功能
快速体验 k8s 的核心功能:应用部署.访问.Scale Up/Down 以及滚动更新 https://yq.aliyun.com/articles/337209?spm=a2c4e.11153940 ...
- k8s kubernetes 核心笔记 镜像仓库 项目k8s改造(含最新k8s v1.16.2版本)
k8s kubernetes 核心笔记 镜像仓库 项目k8s改造 2019/10/24 Chenxin 一 基本资料 一 参考: https://kubernetes.io/ 官网 https://k ...
- k8s的核心对象
一.Deployment的概念 K8S本身并不提供网络的功能,所以需要借助第三方网络插件进行部署K8S中的网络,以打通各个节点中容器的互通. POD,是K8S中的一个逻辑概念,K8S管理的是POD,一 ...
- K8S(05)核心插件-ingress(服务暴露)控制器-traefik
K8S核心插件-ingress(服务暴露)控制器-traefik 1 K8S两种服务暴露方法 前面通过coredns在k8s集群内部做了serviceNAME和serviceIP之间的自动映射,使得不 ...
- python核心模块方法
********************os模块: os.remove() 删除文件 os.unlink() 删除文件 os.rename() 重命名文件 os.listdir() 列出指定目录下所有 ...
- K8S(03)核心插件-Flannel网络插件
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 K8S核心网络插件Flannel 目录 系列文 ...
- K8S(04)核心插件-coredns服务
K8S核心插件-coredns服务 目录 K8S核心插件-coredns服务 1 coredns用途 1.1 为什么需要服务发现 2 coredns的部署 2.1 获取coredns的docker镜像 ...
- 一文讲明白K8S各核心架构组件
目录 一.写在前面 二.K8S为我们提供了怎样的能力 三.架构 3.1.MasterNode 3.2.WorkerNode 四.核心组件 4.1.ApiServer 4.1.1.概述 4.1.2.是集 ...
- k8s命令补全方法
正常安装了k8s后,使用kubect 工具后接的命令不能直接tab补全 命令补全方法: yum -y install bash-completionsource /usr/share/bash-com ...
随机推荐
- Django + Celery 实现动态配置定时任务
哈喽,今天给大家分享一篇Django+Celery实现动态配置定时任务,因为最近也是无意间看到一位大佬关于这块的文章,然后自己觉得不错,也想学习写一下,然后最终实现功能是在前端页面统一管理计划任务,大 ...
- Unity读取StreamingAssets路径下的文件
/// <summary> ///读取StreamingAssets中的文件 /// </summary> /// <param name="path" ...
- uni-app运行到浏览器跨域H5页面的跨域问题解决方案
官方文档对跨域的解决方案推荐: https://ask.dcloud.net.cn/article/35267 更方便的解决方案 项目根目录直接创建一个vue.config.js文件,并在里面配置代理 ...
- Spring MVC基于注解@Controller和@RequestMapping开发的一个例子
1.创建web项目 2.在springmvc的配置文件中指定注解驱动,配置扫描器 在 Spring MVC 中使用扫描机制找到应用中所有基于注解的控制器类,所以,为了让控制器类被 Spring MVC ...
- eatwhatApp开发实战(二)
上期,我们做了个小app“eatwhat”,接下来每期都会为其添加新的功能.本期,我们为店铺增加添加店铺的功能. 还是先设置个布局: <RelativeLayout android:layout ...
- PHP常量和数据类型
引言 先用一个题来作为开端:PHP字符串的三种定义方式是什么?有什么区别? 它们分别是单引号'',双引号"",newdoc和heredoc. 区别是:单引号不能解析变量,不能解析转 ...
- uwsgi+nginx 502 bad get away 错误
用uwsgi和nginx部署网站时有时候访问网站会出现502错误 配置,启动文件等完全没有问题. 目前解决方法是重启uwsgi就可以了(虽然说502错误应该有很多产生原因啦) 所用命令: $ ps - ...
- Java实现 蓝桥杯VIP 算法训练 Hankson的趣味题
问题描述 Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫Hankson.现 在,刚刚放学回家的Hankson 正在思考一个有趣的问题. 今天在课堂上,老师讲解了如 ...
- Java实现 蓝桥杯VIP 算法提高 解二元一次方程组
算法提高 解二元一次方程组 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个二元一次方程组,形如: a * x + b * y = c; d * x + e * y = f; x,y代 ...
- Java实现莱布尼兹问题
历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式: pai = 4*(1-1/3+1/5-1/7 -) 参见[图1.png] 这个公式简单而优美,但美中不足,它收敛的太慢了 ...