k8s容器云架构之dubbo微服务—K8S(02)管理核心资源的三种基本方法

简介: 博客地址:https://www.cnblogs.com/sseban哔哩哔哩:https://space.bilibili.com/394449264

管理k8s核心资源的三种基本方法:

目录

  • 系列文章说明
  • 管理k8s核心资源的三种基本方法:
  • 1 方法分类
  • 2 kubectl命令行工具
  • 2.0 增加kubectl自动补全
  • 2.1 get 查
  • 2.1.1 查看名称空间namespace
  • 2.1.2 查看namespace中的资源
  • 2.1.3 -o yaml查看资源配置清单详细信息
  • 2.2 创建删除名称空间
  • 2.3 管理POD控制器和POD
  • 2.4 service资源管理
  • 2.4.1 创建service资源
  • 2.4.2 扩容POD看service怎么调度
  • 2.5 explain查看属性的定义和用法
  • 3 统一资源配置清单
  • 3.1 语法格式
  • 3.1.1 学习方法
  • 3.2 初略用法
  • 3.2.1 查看已有资源的资源配置清单
  • 3.2.2 创建并应用资源配置清单
  • 3.2.3 修改资源配置清单
  • 3.2.4 删除资源配置清单

1 方法分类

  1. 陈述式--主要依赖命令行工具kubectl进行管理
  • 优点
    可以满足90%以上的使用场景
    对资源的增、删、查操作比较容易
  • 缺点
    命令冗长,复杂,难以记忆
    特定场景下,无法实现管理需求
    对资源的修改麻烦,需要patch来使用json串更改。
  1. 声明式-主要依赖统一资源配置清单进行管理
  2. GUI式-主要依赖图形化操作界面进行管理

2 kubectl命令行工具

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

image.png

一般要养成习惯,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

image.png

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.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

image.png

3 统一资源配置清单

统一资源配置清单,就是一个yaml格式的文件,文件中按指定格式定义了所需内容,然后通过命令行工具kubectl应用即可

3.1 语法格式

kubectl create/apply/delete -f /path_to/xxx.yaml

3.1.1 学习方法

  1. 忌一来就无中生有自己写,容易把自己憋死
  2. 先看官方或别人写的,能读懂即可
  3. 别人的读懂了能改改内容即可
  4. 遇到不懂的用kubectl explain查帮助

3.2 初略用法

3.2.1 查看已有资源的资源配置清单

kubuctl get svc nginx-dp -o yaml -n kube-pubic

image.png

必须存在的四个部分为:

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命令都会根据配置文件创建资源,但是:

  1. create命令只会新建,如果资源文件已使用过,则会提示错误
  2. 如果资源不存在,apply命令会新建,如果已存在,则会根据配置修改
  3. 如果是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
  1. 意思是如果要用apply修改,就应该用apply命令创建,或者create创建时加--save-config参数
  2. 所以养成使用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
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
714 59
|
缓存 负载均衡 监控
微服务架构下的电商API接口设计:策略、方法与实战案例
本文探讨了微服务架构下的电商API接口设计,旨在打造高效、灵活与可扩展的电商系统。通过服务拆分(如商品、订单、支付等模块)和标准化设计(RESTful或GraphQL风格),确保接口一致性与易用性。同时,采用缓存策略、负载均衡及限流技术优化性能,并借助Prometheus等工具实现监控与日志管理。微服务架构的优势在于支持敏捷开发、高并发处理和独立部署,满足电商业务快速迭代需求。未来,电商API设计将向智能化与安全化方向发展。
630 102
|
运维 Kubernetes Cloud Native
云原生技术:容器化与微服务架构的完美结合
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其灵活性和高效性成为企业的新宠。本文将深入探讨云原生的核心概念,包括容器化技术和微服务架构,以及它们如何共同推动现代应用的发展。我们将通过实际代码示例,展示如何在Kubernetes集群上部署一个简单的微服务,揭示云原生技术的强大能力和未来潜力。
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
761 82
|
运维 负载均衡 Shell
控制员工上网软件:高可用架构的构建方法
本文介绍了构建控制员工上网软件的高可用架构的方法,包括负载均衡、数据备份与恢复、故障检测与自动切换等关键机制,以确保企业网络管理系统的稳定运行。通过具体代码示例,展示了如何实现这些机制。
368 63
|
机器学习/深度学习 人工智能 NoSQL
记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
Meta研究团队开发的记忆层技术通过替换Transformer中的前馈网络(FFN),显著提升了大语言模型的性能。记忆层使用可训练的固定键值对,规模达百万级别,仅计算最相似的前k个键值,优化了计算效率。实验显示,记忆层使模型在事实准确性上提升超100%,且在代码生成和通用知识领域表现优异,媲美4倍计算资源训练的传统模型。这一创新对下一代AI架构的发展具有重要意义。
1096 11
记忆层增强的 Transformer 架构:通过可训练键值存储提升 LLM 性能的创新方法
|
自然语言处理 算法 JavaScript
面向长文本的多模型协作摘要架构:多LLM文本摘要方法
多LLM摘要框架通过生成和评估两个步骤处理长文档,支持集中式和分散式两种策略。每个LLM独立生成文本摘要,集中式方法由单一LLM评估并选择最佳摘要,而分散式方法则由多个LLM共同评估,达成共识。论文提出两阶段流程:先分块摘要,再汇总生成最终摘要。实验结果显示,多LLM框架显著优于单LLM基准,性能提升最高达3倍,且仅需少量LLM和一轮生成评估即可获得显著效果。
1174 10
面向长文本的多模型协作摘要架构:多LLM文本摘要方法
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
机器学习/深度学习 算法 数据可视化
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
本文探讨了在量化交易中结合时序特征和静态特征的混合建模方法。通过整合堆叠稀疏降噪自编码器(SSDA)和基于LSTM的自编码器(LSTM-AE),构建了一个能够全面捕捉市场动态特性的交易系统。SSDA通过降噪技术提取股票数据的鲁棒表示,LSTM-AE则专注于捕捉市场的时序依赖关系。系统采用A2C算法进行强化学习,通过多维度的奖励计算机制,实现了在可接受的风险水平下最大化收益的目标。实验结果显示,该系统在不同波动特征的股票上表现出差异化的适应能力,特别是在存在明确市场趋势的情况下,决策准确性较高。
803 5
基于深度混合架构的智能量化交易系统研究: 融合SSDA与LSTM自编码器的特征提取与决策优化方法
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。

相关产品

  • 容器服务Kubernetes版