K8S(02)管理核心资源的三种基本方法
系列文章说明
本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白
需要视频可以联系我
管理k8s核心资源的三种基本方法:
1 方法分类
- 陈述式--主要依赖命令行工具
kubectl进行管理- 优点
可以满足90%以上的使用场景
对资源的增、删、查操作比较容易 - 缺点
命令冗长,复杂,难以记忆
特定场景下,无法实现管理需求
对资源的修改麻烦,需要patch来使用json串更改。
- 优点
- 声明式-主要依赖统一资源配置清单进行管理
- GUI式-主要依赖图形化操作界面进行管理
2 kubectl命令行工具
2.0 增加kubectl自动补全
二进制安装的k8s,kubectl工具没有自动补全功能(其他方式安装的未验证),可以使用以下方式开启命令自动补全
source <(kubectl completion bash)
2.1 get 查
2.1.1 查看名称空间namespace
~]# kubectl get namespaces
NAME STATUS AGE
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
# namespaces可以简写为ns
kubectl get ns
# 但不是所有资源都可以简写,所以我还是习惯tab补全名
2.1.2 查看namespace中的资源
get all查询所有资源
kubectl get all
# 默认是查询default名称空间的资源,查询其他名称空间,需要加 -n namespaces
kubectl get all -n kube-public

一般要养成习惯,
get任何资源的时候,都要加上-n参数指定名称空间
get pods查询所有pod
podsecuritypolicies.extensions
~]# kubectl get pods -n default
NAME READY STATUS RESTARTS AGE
nginx-ds-p66qh 1/1 Running 0 2d10h
get nodes查询所有node节点
~]# kubectl get nodes -n default
NAME STATUS ROLES AGE VERSION
hdss7-21.host.com Ready master,node 2d12h v1.15.5
hdss7-22.host.com NotReady <none> 2d12h v1.15.5
2.1.3 -o yaml查看资源配置清单详细信息
-o yaml 可以查看yaml格式的资源配置清单详情
# 查看POD的清单
~]# kubectl -n kube-public get pod nginx-dp-568f8dc55-jk6nb -o yaml
# 查看deploy的清单
~]# kubectl -n kube-public get deploy nginx-dp -o yaml
# 查看service的清单
~]# kubectl -n kube-public get service -o yaml -n kube-public
2.2 创建删除名称空间
create namespace创建名称空间
~]# kubectl create namespace app
namespace/app created
~]# kubectl get namespaces
NAME STATUS AGE
app Active 16s
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
delete namespaces删除名称空间
~]# kubectl delete namespaces app
namespace "app" deleted
~]# kubectl get namespaces
NAME STATUS AGE
default Active 4d11h
kube-node-lease Active 4d11h
kube-public Active 4d11h
kube-system Active 4d11h
2.3 管理POD控制器和POD
以deployment类型的POD控制为例,关于POD控制器类型,请参考官网
创建POD控制器
kubectl create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9 -n kube-public
~]# kubectl get deployments -n kube-public
NAME READY UP-TO-DATE AVAILABLE AGE
nginx-dp 1/1 1 1 18s
~]# kubectl get pod -n kube-public
NAME READY STATUS RESTARTS AGE
nginx-dp-568f8dc55-9qt4j 1/1 Running 0 7m50s
-o wide查看扩展信息
# 查看POD控制器信息,比基础信息多出了镜像来源,选择器等
kubectl get deployments -o wide -n kube-public
# 查看POD信息,比基础信息多出了POD的IP地址,节点位置等,
kubectl get pod -o wide -n kube-public

describe查看资源详细信息
# 查看POD控制器详细信息
kubectl describe deployments nginx-dp -n kube-public
# 查看POD详细信息
kubectl describe pod nginx-dp-568f8dc55-9qt4j -n kube-public
exec进入某个POD
kubectl -n kube-public exec -it nginx-dp-568f8dc55-9qt4j bash
用法与docker exec类似
scale 扩容POD
kubectl -n kube-public scale deployments nginx-dp --replicas=2
delete删除POD和POD控制器
~]# kubectl -n kube-public delete pods nginx-dp-568f8dc55-9qt4j
pod "nginx-dp-568f8dc55-9qt4j" deleted
~]# kubectl -n kube-public get pods
NAME READY STATUS RESTARTS AGE
nginx-dp-568f8dc55-hnrxr 1/1 Running 0 13s
~]# kubectl -n kube-public delete deployments nginx-dp
deployment.extensions "nginx-dp" deleted
~]# kubectl -n kube-public get pods
No resources found.
在POD控制器存在的情况下,删除了POD,会由POD控制器再创建出新的POD
删除POD控制器后,对应的POD也会一并删除
2.4 service资源管理
从上面的POD删除重建的过程可知,虽然POD会被POD控制器拉起,但是存放的NODE或POD的IP都是不确定的,那怎么对外稳定的提供服务呢
这就需要引入service的功能了,它相当于一个反向代理,不管后端POD怎么变化,server提供的服务都不会变化,可以为pod资源提供稳定的接入点
2.4.1 创建service资源
~]# kubectl -n kube-public create deployment nginx-dp --image=harbor.zq.com/public/nginx:v1.17.9
deployment.apps/nginx-dp created
~]# kubectl -n kube-public expose deployment nginx-dp --port=80
service/nginx-dp exposed
~]# kubectl -n kube-public get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-dp ClusterIP 192.168.94.73 <none> 80/TCP 45s
可以看到创建了一个VIP192.168.94.73,查看LVS信息,可以看到转发条目
[root@hdss7-21 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
......
TCP 192.168.94.73:80 nq
-> 172.7.21.3:80 Masq 1 0 0
2.4.2 扩容POD看service怎么调度
~]# kubectl -n kube-public scale deployment nginx-dp --replicas=2
deployment.extensions/nginx-dp scaled
~]# ipvsadm -Ln
......
TCP 192.168.94.73:80 nq
-> 172.7.21.3:80 Masq 1 0 0
-> 172.7.22.4:80 Masq 1 0 0
2.5 explain查看属性的定义和用法
查看service资源下metadata的定义及用法
kubectl explain service.metadata

3 统一资源配置清单
统一资源配置清单,就是一个yaml格式的文件,文件中按指定格式定义了所需内容,然后通过命令行工具kubectl应用即可
3.1 语法格式
kubectl create/apply/delete -f /path_to/xxx.yaml
3.1.1 学习方法
- 忌一来就无中生有自己写,容易把自己憋死
- 先看官方或别人写的,能读懂即可
- 别人的读懂了能改改内容即可
- 遇到不懂的用
kubectl explain查帮助
3.2 初略用法
3.2.1 查看已有资源的资源配置清单
kubuctl get svc nginx-dp -o yaml -n kube-pubic

必须存在的四个部分为:
apiVersion
kind
metadata
spec
资源配置清单中有许多项目,如果想查看资源配置清单中某一项的意义或该项下面可以配置的内容,可以使用explain来获取
kubectl explain service.kind
3.2.2 创建并应用资源配置清单
创建yaml配置文件
cat >nginx-ds-svc.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ds
name: nginx-ds
namespace: default
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: nginx-ds
type: ClusterIP
EOF
应用配置创建资源
kubectl create -f nginx-ds-svc.yaml
# 或
kubectl apply -f nginx-ds-svc.yaml
# 查看结果
[root@hdss7-21 ~]# kubectl get -f nginx-ds-svc.yaml
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.48.225 <none> 80/TCP 24s
create和apply的区别
create命令和apply命令都会根据配置文件创建资源,但是:
create命令只会新建,如果资源文件已使用过,则会提示错误
如果资源不存在,apply命令会新建,如果已存在,则会根据配置修改
如果是create命令新建的资源,使用apply修改时会提示
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml
Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply
意思是如果要用apply修改,就应该用apply命令创建,或者create创建时加
--save-config参数所以养成使用apply命令的习惯即可
3.2.3 修改资源配置清单
在线修改
使用edit命令,会打开一个在线的yaml格式文档,直接修改该文档后,修改立即生效
kubectl edit svc nginx-ds -n default
# 查看结果
[root@hdss7-21 ~]# kubectl get service nginx-ds
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.48.225 <none> 8080/TCP 2m37s
离线修改
离线修改就是修改原来的yaml文件,然后使用apply命令重新应用配置即可
#将对外暴露的端口改为881
sed -i 's#port: 80#port: 881#g' nginx-ds-svc.yaml
# edit修改过资源,再用apply修改,会报错
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml
The Service "nginx-ds" is invalid:
* spec.ports[0].name: Required value
* spec.ports[1].name: Required value
# 加上--force强制修改选项
[root@hdss7-21 ~]# kubectl apply -f nginx-ds-svc.yaml --force
service/nginx-ds configured
# 查看结果
[root@hdss7-21 ~]# kubectl get service nginx-ds
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx-ds ClusterIP 192.168.142.98 <none> 881/TCP 8s
3.2.4 删除资源配置清单
陈述式删除
即:直接删除创建好的资源
kubectl delete svc nginx-ds -n default
声明式删除
即:通过制定配置文件的方式,删除用该配置文件创建出的资源
kubectl delete -f nginx-ds-svc.yaml
K8S(02)管理核心资源的三种基本方法的更多相关文章
- Liunx 环境下vsftpd的三种实现方法(超详细参数)
以下文章介绍Liunx 环境下vsftpd的三种实现方法 ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz,目前已经到2.0.3版本.假 ...
- RFID标签天线的三种制作方法
在RFID标签中,天线层是主要的功能层,其目标是传输最大的能量进出标签芯片.RFID天线是按照射频识别所要求的功能而设计的电子线路,将导电银浆或导电碳浆网印在PVC.PC或PET上,再与面层.保护层和 ...
- Android开发 ---Button的OnClickListener的三种实现方法
button的OnClickListener的三种实现方法 onclick事件的定义方法,分为三种,分别为 1.在xml中进行指定方法: 2.在Actitivy中new出一个OnClickListen ...
- uni-app开发经验分享一: 多页面传值的三种解决方法
开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...
- javase-常用三种遍历方法
javase-常用三种遍历方法 import java.util.ArrayList; import java.util.Iterator; import java.util.List; public ...
- JS面向对象(3) -- Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Java中Map的三种遍历方法
Map的三种遍历方法: 1. 使用keySet遍历,while循环: 2. 使用entrySet遍历,while循环: 3. 使用for循环遍历. 告诉您们一个小秘密: (下↓面是测试代码,最爱看 ...
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
- spring与mybatis三种整合方法
spring与mybatis三种整合方法 本文主要介绍Spring与Mybatis三种常用整合方法,需要的整合架包是mybatis-spring.jar,可通过链接 http://code.googl ...
随机推荐
- 【ASM】查看ASM磁盘组剩余容量和总容量
col total_size for a10; col free_size for a20; select name,total_mb/1024 || 'G' as total_size , free ...
- oracle视图添加hint
/* Formatted on 2019/8/6 下午 02:51:21 (QP5 v5.163.1008.3004) */ SELECT DB FROM ( SELECT /*+ index(A.r ...
- 前端面试准备笔记之JavaScript(04)
01. DOM的本质 xml是一种可扩展的标记性语言,可扩展就是可以描述任何结构的数据,他是一棵树,可以自定义标签,可以自己扩展. html也是一种特定的xml,他规定了一些标签的名称,结构与xml是 ...
- Eureka详解系列(二)--如何使用Eureka(原生API,无Spring)
简介 通过上一篇博客 Eureka详解系列(一)--先谈谈负载均衡器 ,我们知道了 Eureka 是什么以及为什么要使用它,今天,我们开始研究如何使用 Eureka. 在此之前,先说明一点.网上几乎所 ...
- Python+Selenium+Unittest实现PO模式web自动化框架(7)
1.TestDatas目录的功能 TestDatas目录下存放的是测试数据,比如:登录功能的测试用例数据. # --^_^-- coding:utf-8 --^_^-- # @Remark:登录测试数 ...
- linux系统层面调优
linux系统层面调优和常见的面试题 - 云+社区 - 腾讯云 https://cloud.tencent.com/developer/article/1664287
- nothreading use single threaded
threading: # ThreadingMixIn.daemon_threads indicates how threads will behave on an # abrupt shut ...
- "INVALID" is not a valid start token
Search · is not a valid start token https://github.com/prometheus/prometheus/search?q=is+not+a+valid ...
- shiro的授权与认证
shiro的授权与认证 package com.cy.pj.common.aspect;import java.lang.reflect.Method;import java.util.Arrays; ...
- C # 9.0的record
官方消息: c # 9.0已经过时了!早在五月份,我就在博客中介绍了 c # 9.0计划,下面是该文章的更新版本,以便与我们最终发布的计划相匹配. 对于每一个新的 c # 版本,我们都在努力提高常见编 ...