k8s整理

Kubernetes集群管理与部署实践:kubeadm、Sealos与kubectl命令详解

一.资料

https://www.bilibili.com/video/BV1m34y1Y74P/?spm_id_from=333.337.search-card.all.click&vd_source=1f93197270b6d7369ffabdb5e9f8460e

二、文档整理

1.安装
# kubeadm快速安装、或者二进制方式安装

# Sealos离线安装
https://zhuanlan.zhihu.com/p/654146218

# 设置服务器名
hostnamectl set-hostname xxx
2.常用命令
日常操作
# 获取所有节点
kubectl get nodes

# 获取所有命名空间
kubectl get namespace

# 查看service关联的pod
kubectl get endpoints
# 包括所有命名空间
kubectl get endpoints -A

# 获取指定命名空间deployment
kubectl get deployment -n default

# 获取指定命名空间service
kubectl get service -n default

# 获取指定命名空间pod
kubectl get pods -n default
kubectl describe pod <pod名>

# 新建资源
kubectl create

# 新建或更新资源,主要用于yaml文件
kubectl apply -f deployment.yaml

# 应用升级
kubectl apply -f deployment web
# nginx为容器名称
kubectl set image deployment web nginx=nginx:1.17
# --record=true 开启升级备注,会将命令记录下来
kubectl set image deployment web nginx=nginx:1.17 --record=true

# 回滚
# 查看发布的版本
kubectl rollout history deployment web
# 回退上一个版本
kubectl rollout undo deployment web
# 回退到历史指定版本
kubectl rollout undo deployment web --to-revision=2

# 扩容:修改副本数量
kubectl scale deployment web --replicas=10
# 或者修改yaml的replicas值,再apply

# 滚动升级,重启,即使yml没变更也重新创建
kubectl rollout restart deployment xxx -n test

# 查日志
kubectl logs <pod名>

# 进入容器终端
# pod多容器时,使用-c指定具体容器
kubectl exec -it <pod名> <-c 指定具体容器> -- bash
集群节点变动
# 设置节点不可调度,逐台进行
kubectl cordon xxx-node-01

# 驱逐节点上的pod,逐台进行
kubectl drain xxx-node-01 --force --ignore-daemonsets

# 扩容完毕恢复节点可调度
kubectl uncordon xxx-node-01
集群灾难性问题重置并重启
# 第一种,利用kubeadm,执行前需备份数据
kubeadm reset

systemctl stop kubelet

systemctl stop docker

systemctl start docker

systemctl start kubelet

kubeadm init

# 第二种,kubectl可用时
# 使用kubectl命令重启k8s API Server、Controller Manager和Scheduler等重要组件
kubectl delete pod kube-apiserver-master-x -n kube-system
kubectl delete pod kube-controller-manager-master-x -n kube-system
kubectl delete pod kube-scheduler-master-x -n kube-system
kubectl delete pod etcd-master-x -n kube-system
3.相关技术
1.yaml文件 内容分割
使用---符号,--- xxx ---包裹的内容,代表一段yaml资源。

2.yaml字段
# Deployment类型
apiVersion:API版本  ,可去官网查询,也可执行命令:kubectl api-resources | grep deployment
kind:资源类型
metadata:元素预信息,名字,标记等
replicas:副本数
selector:标签选择器,标签匹配,保证每个应用唯一,起到资源关联的作用。与下边metadata.labels保持一致。
template:Pod模板
spec:Pod规格
containers:容器配置
image:指定镜像

# service类型
port:service端口,通过ClusterIP访问用
targetPort:镜像内服务端口,例如nginx镜像是80
type:Service类型 NodePort ClusterIP等

# 基本资源概念
Pod:k8s最小部署单元,一组容器的集合。
Deployment:最常见的控制器,用于更高级别部署和管理Pod。
Service:为Pod提供负载均衡,对外提供统一访问入口。
Label:标签,附加到某个资源上,用于关联对象、查询和筛选。

# 命名空间:逻辑分离,多个虚拟集群,利于权限控制,实际部署推荐使用。
default:默认命名空间
kube-system:k8s系统方面的命名空间
kube-public:公开的命名空间,谁都可以访问
kube-node-lease:k8s内部命名空间
# 命令行通过-n指定命名空间
# yaml资源元数据里指定namespace

# Deployment:工作负载管理器,管理Pod、应用部署、升级、扩容、回滚等。

# Pod
# 逻辑抽象概念,Kubernetes是创建和管理的最小单元,一个Pod由一个容器或多个容器组成。
# 一个Pod为一个应用实例。
# Pod中的容器始终部署在一个Node上。
# Pod中容器共享网络、存储资源。
# 有两种用法,可运行单个容器(常用做法,此时可认为pod就是一个容器的抽象封装),
# 也可运行多个容器(边车模式)。可在Pod中定义专门的容器,用来执行主容器之外的辅助工作。
# 如:日志收集,应用监控。网络共享、共享存储(数据卷形式,k8s实现),用来读取文件。

# Service
# 解决pod的动态变化,提供统一入口。
# 定义一组pod的访问策略,负载均衡。
port:service端口
protocol:TCP/UDP  协议
targetPort:容器端口
# Service三种类型:spec中的type属性指定
ClusterIP:集群内部使用,分配一个稳定的IP地址,即VIP(负载均衡器),只能集群内部使用。
NodePort:对外暴露应用,在每个节点上启用一个端口来暴露服务,可在集群外部访问。也会分配内部集群IP地址。
LoadBalancer:对外暴露应用,适用公有云,除暴露服务外,请求底层云平台上的负载均衡器,将node添加进去。

# Ingress
# 暴露应用的入口定义方法
# Ingress Controller:路由规则
# 官方nginx控制器:https://github.com/kubernetes/ingress-nginx
# 修改官方镜像地址:lizhenliang/nginx-ingress-controller:0.30.0
# 将Ingress Controller暴露,一般使用宿主机网络或者NodePort
# spec: hostNetwork:true

三、k8s管理系统

1.kuboard
sudo docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 12880:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://192.168.1.107:12880" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /opt/kuboard:/data \
  eipwork/kuboard:v3

# 国内镜像源
sudo docker run -d \
  --restart=unless-stopped \
  --name=kuboard \
  -p 12880:80/tcp \
  -p 10081:10081/tcp \
  -e KUBOARD_ENDPOINT="http://192.168.1.107:12880" \
  -e KUBOARD_AGENT_SERVER_TCP_PORT="10081" \
  -v /opt/kuboard:/data \
  swr.cn-east-2.myhuaweicloud.com/kuboard/kuboard:v3

  # 访问地址:http://192.168.1.107:30080/
  # 默认账号密码:amdin/Kuboard123
  # 当前密码:admin/admin123
2.命令行

参考命令总结。

四、Sealos整理

1.应用场景
  • Kubernetes 集群安装
  • Kubernetes 集群、数据库、中间件、SaaS 应用整体打包,一键交付
  • 离线交付,多架构支持,国产化支持
  • 各种在 Kubernetes 上编排的分布式应用交付
2.国内官网

https://sealos.run/

Sealos命令行安装
# 二进制下载
curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh | PROXY_PREFIX=https://mirror.ghproxy.com sh -s ${VERSION} labring/sealos
# v4.3.7
curl -sfL https://mirror.ghproxy.com/https://raw.githubusercontent.com/labring/sealos/main/scripts/install.sh | PROXY_PREFIX=https://mirror.ghproxy.com sh -s v4.3.7 labring/sealos

# 包管理工具安装
# DEB 源
echo "deb [trusted=yes] https://apt.fury.io/labring/ /" | sudo tee /etc/apt/sources.list.d/labring.list
sudo apt update
sudo apt install sealos

# RPM 源
sudo cat > /etc/yum.repos.d/labring.repo << EOF
[fury]
name=labring Yum Repo
baseurl=https://yum.fury.io/labring/
enabled=1
gpgcheck=0
EOF
sudo yum clean all
sudo yum install sealos
常用命令
# 安装k8s单机版
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.9 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 --single

# 安装 K8s 集群
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.27.9 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
     --masters 192.168.184.128 \
     --nodes 192.168.184.129,192.168.184.130 -p 123456

# 使用docker版本的k8s
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.27.9 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4 \
     --masters 192.168.184.128 \
     --nodes 192.168.184.129,192.168.184.130 -p 123456

# 使用cilium,因linux内核版本过低无法启动,issues:https://github.com/rancher/rke2/issues/3571
sealos run sealos.hub/labring/kubernetes-docker:v1.24.10-4.1.6-amd64 sealos.hub/labring/helm:v3.8.2 sealos.hub/labring/flannel:v0.20.2-amd64 \
  --masters 192.168.2.176 \
  --nodes 192.168.2.177,192.168.2.178,192.168.2.179 \
  --passwd 123456

# 本地ubuntu集群
sealos run sealos.hub/labring/kubernetes-docker:v1.24.10-4.1.6-amd64 sealos.hub/labring/helm:v3.8.2 sealos.hub/labring/flannel:v0.20.2-amd64 \
  --masters 192.168.184.132 \
  --nodes 192.168.184.133,192.168.184.134 \
  --passwd 123456

# K8s 节点管理
sealos add --nodes 192.168.64.21,192.168.64.19
sealos add --masters 192.168.64.21,192.168.64.19
sealos delete --nodes 192.168.64.21,192.168.64.19

# 清理 K8s 集群
sealos reset

# 离线安装 K8s:离线环境只需要提前导入镜像,其它步骤与在线安装一致。
sealos pull registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.27.9 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4
# -m 保存多镜像只支持docker-archive格式
sealos save -o kubernetes.tar -m --format docker-archive registry.cn-shanghai.aliyuncs.com/labring/kubernetes-docker:v1.27.9 registry.cn-shanghai.aliyuncs.com/labring/helm:v3.9.4 registry.cn-shanghai.aliyuncs.com/labring/cilium:v1.13.4
sealos load -i kubernetes.tar
sealos images

# 快速启动 K8s 集群:单机安装,集群安装同理
sealos run registry.cn-shanghai.aliyuncs.com/labring/kubernetes:v1.28.5
# 或者
sealos run kubernetes.tar
<think>嗯,用户之前问了后端系统的安全性,现在转向了Kubernetes的常见用法,看来他对系统架构和运维方面比较感兴趣。需要整理k8s的常见用法,可能用户刚开始接触k8s,或者想系统化自己的知识。用户可能是在准备面试,或者在实际工作中需要部署和管理容器化应用,所以需要一份清晰的指南。 首先,我得确定用户对k8s的了解程度。之前的回答结构很详细,用户可能期待类似的层次结构。需要覆盖基本概念、核心功能、常用操作、网络存储、运维监控、安全、扩展和生态系统等方面。 要确保回答结构清晰,分点列出,每个部分有子项。例如,核心功能包括部署、扩缩容、配置管理、服务发现、存储管理、自动修复、滚动更新、任务调度。常用操作涉及kubectl命令,可能需要具体例子,但用户可能不需要太详细的命令,而是分类说明。 还要注意用户可能关心的实际应用场景,比如如何做CI/CD集成,监控方案选型,或者安全策略。之前的回答中有提到安全维度,所以在k8s这里也需要涉及RBAC、网络策略、密钥管理等内容。 用户可能还需要了解k8s的生态系统,比如Helm、Operators、Service Mesh等工具,这些能帮助他们扩展功能。另外,常见问题如Pod故障排查、资源优化、网络问题等也是实际使用中会遇到的问题,需要给出解决思路。 需要避免太技术化的术语,但保持专业性。比如解释Deployment和StatefulSet的区别时,要简明扼要。同时,结合之前的回答风格,可能用户喜欢表格和公式,比如在核心功能部分用表格区分控制器类型,或者在资源配额部分用数学表达式。 还要注意用户可能没提到的深层需求,比如如何选择存储类型,或者如何监控集群健康状态,这些在整理常见用法时也应涵盖。最后,确保回答有总结,强调k8s的优势和适用场景,帮助用户形成整体认识。</think>以下是对Kubernetes常见用法的系统化整理,采用分层结构说明核心功能和应用场景: --- ### 一、核心功能模块 | 功能分类 | 实现方式 | 典型应用场景 | 数学表达示例 | |----------------|---------------------------|----------------------------------|-----------------------------------| | **部署管理** | Deployment | 无状态应用滚动更新 | 副本数 $replicas = \lceil \frac{QPS}{1000} \rceil$ | | **有状态服务** | StatefulSet | 数据库集群部署 | 有序编号 $pod\_name = {sts-name}-{0..N-1}$ | | **配置注入** | ConfigMap/Secret | 环境变量动态配置 | 数据映射 $\forall k \in ConfigMap, v \to Pod$ | | **服务发现** | Service/Ingress | 内外网流量路由 | 负载均衡 $endpoints = \sum_{healthy\;pod} ip:port$ | | **存储管理** | PersistentVolume(PV) | 数据库持久化存储 | 容量规划 $PV_{size} \geq \sum_{pod} request_{storage}$ | | **自动扩缩容** | HPA(HorizontalPodAutoscaler) | 应对流量波动 | 扩缩规则 $desiredReplicas = \lceil currentReplicas \times \frac{currentMetricValue}{desiredMetricValue} \rceil$ | --- ### 二、常用操作指令 ```bash # 声明式资源管理 $ kubectl apply -f deployment.yaml # 应用YAML配置(幂等操作) # 实时监控与调试 $ kubectl get pods -l app=nginx --watch # 标签筛选+实时状态监控 $ kubectl logs -f pod/nginx-7cdbd8cdc9-zwxrb # 流式日志跟踪 $ kubectl exec -it pod/nginx -- /bin/sh # 进入容器调试 # 集群状态诊断 $ kubectl describe node worker-01 # 节点资源详情分析 $ kubectl top pod --containers # 容器级资源消耗排名 ``` --- ### 三、网络模型实践 1. **Service类型选择矩阵** | 类型 | 流量特征 | 典型场景 | 网络开销 | |--------------|------------------------|---------------------------|----------| | ClusterIP | 集群内部通信 | 微服务间调用 | 低 | | NodePort | 单节点外部暴露 | 开发环境测试 | 中 | | LoadBalancer | 云厂商负载均衡集成 | 生产环境公网访问 | 高 | | Ingress | 七层路由规则管理 | 多域名HTTPS卸载 | 可变 | 2. **网络策略示例** ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy spec: podSelector: matchLabels: app=db ingress: - from: - podSelector: matchLabels: app=api ports: - protocol: TCP port: 5432 # 只允许api服务访问数据库的5432端口 ``` --- ### 四、存储方案选型 1. **存储类(StorageClass)配置维度** - 性能等级:$IOPS \propto \frac{1}{latency}$ - 数据持久性:$RPO \leq 15\text{min}, RTO \leq 5\text{min}$ - 挂载方式:ReadWriteOnce/ReadOnlyMany/ReadWriteMany 2. **典型存储方案对比** | 存储类型 | 适用场景 | 数据一致性 | 扩容复杂度 | |----------------|-------------------|--------------|------------| | 本地SSD | 高性能数据库 | 强一致性 | 不可扩容 | | Ceph RBD | 通用块存储 | 最终一致性 | 动态扩容 | | NFS | 文件共享 | 弱一致性 | 手动扩容 | | 云盘(如AWS EBS)| 云环境持久化存储 | 强一致性 | 在线扩容 | --- ### 五、运维监控体系 1. **监控指标采集公式** - 节点健康度:$$ \text{NodeScore} = 0.4 \times \text{CPU\_free} + 0.3 \times \text{Mem\_free} + 0.3 \times \text{Disk\_IOPS} $$ - Pod驱逐预测:$$ \text{EvictRisk} = \begin{cases} 1 & \text{if } \frac{current\_memory}{limit} > 0.9 \\ 0.5 & \text{if } \frac{current\_cpu}{limit} > 0.8 \\ 0 & \text{otherwise} \end{cases} $$ 2. **常用工具链组合** ```mermaid graph LR A(Prometheus) -->|采集| B(Node Exporter) A -->|告警| C(AlertManager) D(Grafana) -->|可视化| A E(Fluentd) -->|日志| F(Elasticsearch) ``` --- ### 六、安全加固措施 1. **RBAC权限矩阵** | 角色 | 权限范围 | API资源限制 | |-------------------|------------------------------|----------------------------| | dev-user | 特定namespace的Pod读写 | verbs: get, list, watch | | cluster-admin | 全集群管理权限 | resources: * | | storage-manager | PersistentVolumeClaims管理 | resourceNames: "ssd-*" | 2. **安全基线配置** ```yaml securityContext: runAsNonRoot: true capabilities: drop: ["NET_RAW"] seccompProfile: type: RuntimeDefault ``` --- ### 七、进阶使用模式 1. **Operator设计范式** ```go func Reconcile() error { current := GetCurrentState() desired := CalculateDesiredState() if !reflect.DeepEqual(current, desired) { return UpdateCluster(desired) # 实现声明式状态收敛 } return nil } ``` 2. **混合云调度策略** ```python def schedule_pod(pod): if pod.requires_gpu: return filter_nodes(has_gpu=True) elif pod.low_latency: return min_distance(user_region) else: return cheapest_zone() ``` --- **总结建议**: 生产环境建议采用$GitOps$模式(如Argo CD),配合$Service\;Mesh$(如Istio)实现细粒度流量治理。对于有状态服务,优先使用Operator模式封装领域知识。监控体系应满足$SLO = \frac{成功请求数}{总请求数} \geq 99.9\%$的服务级别目标。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值