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 ...
随机推荐
- 【NLP】常用优化方法
目录 梯度下降法 动量法 AdaGrad算法 RMSProP算法 AdaDelta算法 Adam算法 1.梯度下降法 梯度下降法可以分为三种,批量梯度下降法(BGD).小批量梯度下降(MBGD).随机 ...
- Car的旅行路线 luogu P1027 (Floyd玄学Bug有点毒瘤)
luogu题目传送门! Car的旅行路线 问题描述 又到暑假了,住在城市A的Car想和朋友一起去城市B旅游.她知道每个城市都有四个飞机场,分别位于一个矩形的四个顶点上,同一个城市中两个机场之间有一 ...
- MySQL如何有效的存储IP地址
前几天,阿淼的一个朋友去面试,他回来告诉我,面试官问他 IP 地址是怎么存在数据库的?他当时也没多想,直接就回答的存字符串啊(心想:这么简单的问题,怕不是看不起我吧) 前面这段权当看看,毕竟 IP地址 ...
- CVE-2016-3714-ImageMagick 漏洞利用
漏洞简介:/etc/ImageMagick/delegates.xml 将%s,%l加入到command里造成了命令执行 利用方式: poc代码: push graphic-context viewb ...
- VUE 子组件向父组件传值 , 并且触发父组件方法(函数)
目标:封装一个 搜索组件 <子组件需要传一个或者多个搜索参数到父组件,然后父组件执行列表查询函数> 1.子组件 <div> <input v-model="l ...
- 实战| 配置DataDog监控Apache Hudi应用指标
1. 可用性 在Hudi最新master分支,由Hudi活跃贡献者Raymond Xu贡献了DataDog监控Hudi应用指标,该功能将在0.6.0 版本发布,也感谢Raymond的投稿. 2. 简介 ...
- SpringBoot 之 拦截配置 与SpringCloud
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.SpringBoot 与 SpringMVC 的区别? SpringMVC是基于Spring的MV ...
- Java实现 LeetCode 115 不同的子序列
115. 不同的子序列 给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数. 一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字 ...
- Java实现LeetCode_0026_RemoveDuplicatesFromSortedArray
package javaLeetCode.primary; public class RemoveDuplicatesFromSortedArray_26 { public static void m ...
- 一文带你了解ANR(测试人员)
一.首先,了解一下什么是ANR ANR,是"Application Not Responding"的缩写,即"应用程序无响应".系统会向用户显示一个对话框,用户 ...