当前位置: 首页 > news >正文

kubectl 命令行管理K8S(上)

目录

陈述式资源管理方式

介绍

命令

项目的生命周期

创建    kubectl create命令

 发布    kubectl expose命令

更新    kubectl set

 回滚    kubectl rollout

 删除    kubectl delete

应用发布策略

金丝雀发布


陈述式资源管理方式

介绍

1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口
2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径
3.kubectl 的命令大全
kubectl --help
k8s中文文档:http://docs.kubernetes.org.cn/683.html
4.对资源的增、删、查操作比较方便,但对改的操作就不容易了

可理解成使用一条kubectl命令及其参数选项来实现资源对象的管理操作

命令

查看版本信息

kubectl version

 查看资源对象简写

kubectl api-resources

查看集群信息

kubectl cluster-info

配置kubectl自动补全

source <(kubectl completion bash)

 node节点查看日志

journalctl -u kubelet -f

 获取资源的命令格式

kubectl get <resource> [-o wide|json|yaml] [-n namespace]
获取资源的相关信息,-n 指定命令空间,-o 指定输出格式
resource可以是具体资源名称,如pod nginx-xxx;也可以是资源类型,如pod;或者all(仅展示几种核心资源,并不完整)
--all-namespaces 或 -A :表示显示所有命名空间,
--show-labels :显示所有标签
-l app :仅显示标签为app的资源
-l app=nginx :仅显示包含app标签,且值为nginx的资源

 查看 master 节点状态

kubectl get componentstatuses
kubectl get cs

 查看命名空间

命令空间的作用:用于允许不同 命名空间 的 相同类型 的资源 重名的

kubectl get namespace
kubectl get ns

 查看default命名空间的所有资源

kubectl get all [-n default]

 创建命名空间app

kubectl create ns app
kubectl get ns

删除命名空间app

kubectl delete namespace app
kubectl get ns			

 在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl)

kubectl create deployment nginx-wl --image=nginx  -n kube-public

 描述某个资源的详细信息

kubectl describe deployment nginx-wl -n kube-public
kubectl describe pod nginx-wl-67f75b9476-pllc4 -n kube-public

 

 查看命名空间kube-public 中的pod 信息

kubectl get pods -n kube-public

kubectl exec可以跨主机登录容器,docker exec 只能在容器所在主机上登录

kubectl exec -it nginx-wl-67f75b9476-pllc4 bash -n kube-public

 删除(重启)pod资源,由于存在deployment/rc之类的副本控制器,删除pod也会重新拉起来

kubectl delete pod nginx-wl-67f75b9476-pllc4 -n kube-public

若pod无法删除,总是处于terminate状态,则要强行删除pod

kubectl delete pod <pod-name> -n <namespace> --force --grace-period=0
#grace-period表示过渡存活期,默认30s,在删除pod之前允许pod慢慢终止其上的容器进程,从而优雅退出,0表示立即终止pod

扩缩容

kubectl scale deployment nginx-wl --replicas=2 -n kube-public	# 扩容
kubectl scale deployment nginx-wl --replicas=1 -n kube-public	# 缩容

 删除副本控制器

kubectl delete deployment nginx-wl -n kube-public
kubectl delete deployment/nginx-wl -n kube-public

项目的生命周期

创建-->发布-->更新-->回滚-->删除

创建    kubectl create命令

  • 创建并运行一个或多个容器镜像。
  • 创建一个deployment 或job 来管理容器。
 kubectl create --help

 启动 nginx 实例,暴露容器端口 80,设置副本数 3

kubectl create deployment nginx --image=nginx:1.14 --port=80 --replicas=3

 发布    kubectl expose命令

  • 将资源暴露为新的 Service
kubectl expose --help

为deployment的nginx创建service,并通过Service的80端口转发至容器的80端口上,Service的名称为nginx-service,类型为NodePort

kubectl expose deployment nginx --port=80 --target-port=80 --name=nginx-service --type=NodePort

 Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的(Pod可能会重建),另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求。
Service 通过 Label Selector 实现的对一组的 Pod 的访问。
对于容器应用而言,Kubernetes 提供了基于 VIP(虚拟IP) 的网桥的方式访问 Service,再由 Service 重定向到相应的 Pod。

 service 的 type 类型:

●ClusterIP:提供一个集群内部的虚拟IP以供Pod访问(service默认类型)

●NodePort:在每个Node上打开一个端口以供外部访问,Kubernetes将会在每个Node上打开一个端口并且每个Node的端口都是一样的,通过 NodeIp:NodePort 的方式Kubernetes集群外部的程序可以访问Service。
每个端口只能是一种服务,端口范围只能是 30000-32767。

●LoadBalancer:通过设置LoadBalancer映射到云服务商提供的LoadBalancer地址。这种用法仅用于在公有云服务提供商的云平台上设置Service的场景。通过外部的负载均衡器来访问,通常在云平台部署LoadBalancer还需要额外的费用。
在service提交后,Kubernetes就会调用CloudProvider在公有云上为你创建一个负载均衡服务,并且把被代理的Pod的IP地址配置给负载均衡服务做后端。

●externalName:将service名称映射到一个DNS域名上,相当于DNS服务的CNAME记录,用于让Pod去访问集群外部的资源,它本身没有绑定任何的资源。

查看pod网络状态详细信息和 Service暴露的端口

kubectl get pods,svc -o wide

 查看关联后端的节点

kubectl get endpoints

 查看 service 的描述信息

kubectl describe svc nginx

 在 node01 节点上操作,查看负载均衡端口

yum install ipvsadm -y
ipvsadm -Ln

在 node02 节点上操作,同样方式查看负载均衡端口

yum install ipvsadm -y
ipvsadm -Ln

curl 192.168.75.30:43605
curl 10.0.0.60:80

 在master01操作 查看访问日志

kubectl logs

更新    kubectl set

  • 更改现有应用资源一些信息
kubectl set --help

 获取修改模板

kubectl set image --help

 查看当前 nginx 的版本号

curl -I http://192.168.75.20:43605

 将nginx 版本更新为 1.15 版本

kubectl set image deployment/nginx nginx=nginx:1.15

处于动态监听 pod 状态,由于使用的是滚动更新方式,所以会先生成一个新的pod,然后删除一个旧的pod,往后依次类推

kubectl get pods -w

 滚动更新详解

 DESIRED:表示期望的状态副本数
CURRENT:表示当前副本的总数
UP_TO-DATE:表示当前已经完成更新的副本数
AVAILABLE:表示当前处于 READY 状态的副本数

 deployment控制器更新Pod的方式是 RollingUpdate(滚动更新)
RollingUpdateStrategy(滚动更新策略):  25% max unavailable, 25% max surge

Replicas: 3 desired       控制器的期望副本数
25% max surge             滚动更新时允许创建的最大副本数或比例,向上取整
25% max unavailable       滚动更新时允许销毁的最大副本数或比例,向下取整

假设期望副本数是3,那么滚动更新时能够创建的副本数是 3 * 25% = 0.75  再向上取整为 1,能够销毁的副本数向下取整为 0
                   
假设期望副本数是10,10 * 25% = 2.5  向上取整为 3     向上取整为 2
整个滚动更新过程中Pod副本数始终处在 (10-2)<= Pod副本数 <= (10+3)之间

 再看更新好后的 Pod 的 ip 会改变

kubectl get pods -o wide

再看 nginx 的版本号

curl -I http://192.168.75.20:43605

 回滚    kubectl rollout

  • 对资源进行回滚管理
kubectl rollout --help

 查看历史版本

kubectl rollout history deployment/nginx

 执行回滚到上一个版本

kubectl rollout undo deployment/nginx

 执行回滚到指定版本

kubectl rollout undo deployment/nginx --to-revision=1

 检查回滚状态

kubectl rollout status deployment/nginx

 删除    kubectl delete

删除副本控制器

kubectl delete deployment/nginx

 删除service

kubectl delete svc/nginx-service

应用发布策略

蓝绿发布:两套环境交替升级,旧版本保留一定时间便于回滚,优点用户无感知,部署和回滚速度较快,缺点浪费资源成本高
滚动发布:按批次停止老版本实例,更新启动新版本实例。优点节约资源,缺点部署和回滚速度较慢
灰度发布/金丝雀发布:根据比例将老版本升级,例如80%用户访问是老版本,20%用户访问是新版。优点保证整体系统稳定性,如果出问题影响范围很小,缺点自动化要求高

kubectl set image deployment <资源名称> <容器名>=<容器镜像> && kubectl rollout pause deployment <资源名称>
kubectl rollout resume deployment <资源名称>

金丝雀发布

Deployment控制器支持自定义控制更新过程中的滚动节奏,如“暂停(pause)”或“继续(resume)”更新操作。比如等待第一批新的Pod资源创建完成后立即暂停更新过程,此时,仅存在一部分新版本的应用,主体部分还是旧的版本。然后,再筛选一小部分的用户请求路由到新版本的Pod应用,继续观察能否稳定地按期望的方式运行。确定没问题之后再继续完成余下的Pod资源滚动更新,否则立即回滚更新操作。这就是所谓的金丝雀发布。

更新deployment的版本,并配置暂停deployment

kubectl set image deployment/nginx nginx=nginx:1.14 && kubectl rollout pause deployment/nginx
kubectl rollout status deployment/nginx  #观察更新状态

 监控更新的过程,可以看到已经新增了一个资源,但是并未按照预期的状态去删除一个旧的资源,就是因为使用了pause暂停命令

kubectl get pods -w curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

 确保更新的pod没问题了,继续更新

kubectl rollout resume deployment/nginx

 查看最后的更新情况

kubectl get pods -w curl [-I] 10.0.0.189
curl [-I] 192.168.80.11:44847

 

 

相关文章:

kubectl 命令行管理K8S(上)

目录 陈述式资源管理方式 介绍 命令 项目的生命周期 创建 kubectl create命令 发布 kubectl expose命令 更新 kubectl set 回滚 kubectl rollout 删除 kubectl delete 应用发布策略 金丝雀发布 陈述式资源管理方式 介绍 1.kubernetes 集群管理集群资源…...

Redis 之四:Redis 事务和乐观锁

事务特点 Redis 事务可以一次执行多个命令&#xff0c; 并且带有以下三个重要的保证&#xff1a; 批量操作在发送 EXEC 命令前被放入队列缓存。 收到 EXEC 命令后进入事务执行&#xff0c;事务中任意命令执行失败&#xff0c;其余的命令依然被执行。不具备原子性。 在事务执…...

C# WPF编程-创建项目

1.创建新项目 选择“WPF应用程序”》“下一步” 设置项目 设置项目名称&#xff0c;保存位置等参数>下一步 3.选择框架 4.项目创建成功 5.运行项目...

密码学及其应用(应用篇15)——0/1背包问题

1 问题背景 背包问题是一个经典的优化问题&#xff0c;在计算机科学和运筹学中有着广泛的应用。具体到你提到的这个问题&#xff0c;它是背包问题中的一个特例&#xff0c;通常被称为0/1背包问题。这里&#xff0c;我们有一系列的正整数 &#xff0c;以及一个正整数&#xff0c…...

基于springboot+vue的实验室管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…...

华为OD技术面试案例5-2024年

背景 985本计算机专业&#xff0c;目标院校。 1.15 投递 在某BOSS上投递的简历&#xff0c;HR人很nice&#xff0c;非常负责任。 1.19 收到机试通知 第一题是一个哈夫曼编码&#xff0c;第三题是一个动态规划&#xff0c;机试整体难度不算高&#xff0c;刷leetcode hot100…...

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…...

Unity(第二十部)效果 粒子、线条和拖尾

1、粒子系统 粒子系统介绍 Unity 粒子系统是 Unity 引擎中用于创建和控制粒子效果的工具。它可以模拟各种自然现象&#xff0c;如火焰、烟雾、雨滴等&#xff0c;也可以用于创建特效&#xff0c;如魔法光芒、爆炸效果等。 粒子系统组成 在 Unity 中&#xff0c;粒子系统由发射…...

全量知识系统问题及SmartChat给出的答复 之6 三套工具之1

Q15. 提出想法和问题 前面说过&#xff0c;DDD在我要设计的全量知识系统中位于中间层&#xff0c;是专门用来解决“知识汤”问题的。 解决的思路就是以将为在特定领域中的公司经营提供一个责任-权限平面为目的&#xff0c;帮助他们调整商业模式以及组建恰当的组织&#xff0c…...

[RoarCTF 2019]Easy Calc

这题考查的是: 字符串解析特性目录读取文件内容读取 字符串解析特性详解&#xff1a;PHP字符串解析特性 &#xff08;$GET/$POST参数绕过&#xff09;&#xff08;含例题 buuctf easycalc&#xff09;_参数解析 绕过-CSDN博客 ascii码查询表&#xff1a;ASCII 表 | 菜鸟工具 …...

完美解决 git 报错fatal: Not a git repository (or any of the parent directories): .git

问题描述 错误提示是找不到.git文件&#xff0c;无法执行git指令&#xff0c;意思是 当前你要提交的文件夹中没有.git这个文件 解决方案 执行如下命令&#xff1a; git init...

electron无法设置自己的图标?渲染进程require报错?

electron无法设置自己的图标&#xff1f; 极有可能是图标太大&#xff0c;或者宽高不同 我推荐的网址icon转换 选着20x20一般就可以 渲染进程无法使用require?一直报错&#xff1f; webPreferences: {nodeIntegration: true, enableRemoteModule: true, contextIsolation: …...

vscode连接服务器与FileZilla上传到服务器

https://www.cnblogs.com/qiuhlee/p/17729647.html&#xff08;这个是vscode连接服务器&#xff09; 主机&#xff1a;就是服务器的主机号 使用者名称&#xff1a;比如ALmax的用户名 密码&#xff1a;比如ALmax的密码...

练习 1 Web EasySQL极客大挑战

CTF Week 1 EasySQL极客大挑战 BUUCTF 典中典复习 Web SQL 先尝试输入&#xff0c;找一找交互页面 check.php 尝试万能语句 a’ or true SQL注入&#xff1a;#和–的作用 get传参只能是url编码&#xff0c;注意修改编码&#xff0c;输入的字符串要改成url格式。 POST请求和…...

matlab生成模拟的通信信号

matlab中rand函数生成均匀随机分布的随机数&#xff0c;randn生成正态分布的随机数&#xff1b; matlab来模拟一个通信信号&#xff1b; 通信信号通过信道时&#xff0c;研究时认为它会被叠加上服从正态分布的噪声&#xff1b; 先生成随机信号模拟要传输的信号&#xff0c;s…...

Altair® SimLab® 以流程为导向的多学科仿真环境,可连接CAD 的多物理场工作流程

Altair SimLab 以流程为导向的多学科仿真环境,可连接CAD 的多物理场工作流程 SimLab 是一种以流程为导向的多学科仿真环境&#xff0c;能够精确分析复杂装配体的性能表现。包括结构、热和流体动力学在内的多物理场可以通过高度自动化的建模任务轻松设置&#xff0c;有助于大幅…...

Python爬虫-爬取B站番剧封面

本文是本人最近学习Python爬虫所做的小练习。如有侵权&#xff0c;请联系删除。 页面获取url 代码 import requests import os import re# 创建文件夹 path os.getcwd() /images if not os.path.exists(path):os.mkdir(path)# 当前页数 page 1 # 总页数 total_page 2# 自动…...

AI时代的产品文案秘籍:如何用AI提升效率

人工智能写作工具&#xff1a;解放双手&#xff0c;创作不停歇 在当前人工智能技术飞速发展的背景下&#xff0c;越来越多的个体已经开始利用这一AI写作工具&#xff0c;以显著提高自己的工作效率。这不仅标志着人工智能服务于人类的宏伟时代的到来&#xff0c;更是人人可用的创…...

前端架构: 脚手架通用框架封装之入口文件开发(教程一)

脚手架入口文件开发 创建脚手架项目: abc-cli $ mkdir abc-cli && cd abc-cli 全局安装 lerna, $ npm i -g lerna 基于 lerna 完成项目初始化 $ lerna init 基于 lerna 创建脚手架 cli $ lerna create cli一路回车 好现在生成了一个 cli 的模板&#xff0c;目前需要…...

吴恩达《机器学习》学习笔记

本笔记资料来源于 http://www.ai-start.com/ml2014/&#xff0c;该笔记来自于https://blog.csdn.net/dadapongi6/article/details/105668394&#xff0c;看了忘&#xff0c;忘了看&#xff0c;再看一遍。 时间统计&#xff1a;2024.2.29 5个番茄钟&#xff0c;从week1开始&…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...