企业级容器技术 k8s 控制器

pod分类有两种一种是自主式的控制器,当pod退出后不会被创建。
另一种pod由控制器进行管理,只要控制器还活着,将pod删除之后他会自动的再创建出来。
控制器也分好多种类,具体使用环境和分类请结合官网进行查看
https://kubernetes.io/zh/docs/concepts/workloads/controllers/

ReplicaSet (rs)控制器

首先写一个资源清单,其中控制器为ReplicaSet,使用一个更为方便的镜像ikubernetes/myapp,使用这个镜像以nginx为基础,里面有一个写好的测试页,可以查看主机名更为方便。

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: replicaset-example
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v1

资源清单编写完成,继续创建集群。

[kubeadm@server1 ~]$ kubectl create -f rs-example.yaml 
[kubeadm@server1 ~]$ kubectl get pod -o wide
NAME                       READY   STATUS    RESTARTS   AGE   IP            NODE      NOMINATED NODE   READINESS GATES
replicaset-example-29hp2   1/1     Running   0          51s   10.244.2.6    server3   <none>           <none>
replicaset-example-sfhsx   1/1     Running   0          51s   10.244.0.15   server1   <none>           <none>
replicaset-example-tjtg2   1/1     Running   0          51s   10.244.3.7    server4   <none>           <none>

这样可以看到在三个机器上已经部署完成,并且可以使用curl命令进行访问。
ReplicaSet还有维护的功能,确保每个pod都在运行,但是他是靠什么东西分辨维护什么东西呢,使用的就是标签。
我们先将pod扩容,之后对一个pod进行标签的更改。
修改完成后我们的pod由6个变为了7个,因为修改了标签不认识被修改标签的pod,所以再次创建了一个来保证6个pod正常运行。

[kubeadm@server1 ~]$ kubectl get pod --show-labels 
NAME                       READY   STATUS    RESTARTS   AGE    LABELS
replicaset-example-29hp2   1/1     Running   0          18m    app=httpd
replicaset-example-7lnml   1/1     Running   0          117s   app=nginx
replicaset-example-p2858   1/1     Running   0          40s    app=nginx
replicaset-example-q9zvk   1/1     Running   0          117s   app=nginx
replicaset-example-r2hvl   1/1     Running   0          117s   app=nginx
replicaset-example-sfhsx   1/1     Running   0          18m    app=nginx
replicaset-example-tjtg2   1/1     Running   0          18m    app=nginx

虽然rs控制器可以独立运行,但是一般还是会用deployments控制器,因为deployments控制器他有更新和回滚的功能。

首先编写一个deployments控制器的资源清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 6
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: myapp
        image: ikubernetes/myapp:v2
        ports:
        - containerPort: 80
[kubeadm@server1 ~]$ kubectl apply -f deployment-example.yaml  ##应用文件
deployment.apps/nginx-deployment created
[kubeadm@server1 ~]$ kubectl get pod
NAME                                READY   STATUS    RESTARTS   AGE
nginx-deployment-7d6f48b859-9wq24   1/1     Running   0          7s
nginx-deployment-7d6f48b859-h6gkt   1/1     Running   0          7s
nginx-deployment-7d6f48b859-wmlwk   1/1     Running   0          7s
[kubeadm@server1 ~]$ kubectl get rs
NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-7d6f48b859   3         3         3       34s

在这里其实可以发现他们的名字和前面有些区别,pod的名字构成比原来的名字多了一段,这个号码是rs也就是控制器的号码。所以他的创建顺序是:
1在每个pod节点先创建一个rs(控制器)
2然后再创建pod
3在pod中在配置容器。

但其实一开始也说了deployment控制器他的可以进行更新等操作。操作也是十分的简单直接在资源清单上进行修改,接着读取文件就好了。
再更新中我们也可以看到他的更新并不是简单的只在原来基础上进行更新,而是将原来的pod进行删除从新建立pod。从pod名称中的rs号码就可以看出来。

nginx-deployment-6f7794c6c4-v8bg5   0/1     ContainerCreating   0          2s      <none>        server4   <none>           <none>
nginx-deployment-7d6f48b859-9l64f   0/1     Terminating         0          26s     10.244.3.13   server4   <none>           <none>

我们可以查看rs来验证一下这个过程

[kubeadm@server1 ~]$ kubectl get rs

NAME                          DESIRED   CURRENT   READY   AGE
nginx-deployment-6f7794c6c4   3         3         3       7m20s
nginx-deployment-7d6f48b859   0         0         0       15m

这里出现了两个rs控制器,一个是空闲的,这时我们想一下更新的时侯都将pod删除了,那么为什么不将rs一并删除呢?这个答案就是为了方便回滚。当切回原先的版本,那么就会在原先的rs上直接进行建立新pod。

<think>好的,我现在需要回答用户关于企业级Kubernetes使用方法和最佳实践的问题。首先,我应该回顾用户提供的引用内容,看看有哪些相关的信息可以利用。 用户提到了四个引用,其中引用[1]提到Kubernetes的学习曲线陡峭,生产操作需谨慎,并建议关注可观察性、日志记录、集群监控和安全配置。引用[4]则详细介绍了使用Prometheus监控Kubernetes的最佳实践,包括Annotations的作用和监控指标分类。引用[2]和[3]讨论了Kubernetes与Kubeflow、Spring Boot等的结合,但用户的问题更偏向于企业级使用的最佳实践,所以可能需要更关注引用[1]和[4]。 接下来,我需要整理企业级Kubernetes的最佳实践,涵盖部署、管理、监控、安全等方面。根据引用[1],安全配置是关键,需要包括RBAC、网络策略等。引用[4]提到的监控部分,Prometheus和Annotations的使用也应该包含进去。此外,用户可能还需要了解高可用性部署、资源管理、CI/CD集成等。 需要注意的是,回答的结构要清晰,分点列出,每个部分给出具体建议,并自然地插入引用标注。同时,按照用户要求,生成相关问题,这些问题应该与用户的问题相关,帮助他们进一步深入理解。 在整理过程中,要确保使用正确的中文表达,数学公式和代码块按照系统级指令处理。不过这个问题主要不涉及数学公式,可能更多的是代码块,比如部署文件示例或命令。但用户示例中的快速排序用了代码块,所以可能需要适当加入相关YAML或命令示例。 最后,检查是否符合所有格式要求,比如引用标注的位置,避免使用Markdown,行内公式用$...$,独立公式用$$...$$,但这里可能不需要公式。确认没有使用任何Markdown格式,使用自然的中文,分步骤说明,结构清晰。</think>### 企业级 Kubernetes 使用教程与最佳实践 企业级 Kubernetes 的管理需要结合稳定性、安全性和可扩展性。以下是关键步骤与最佳实践: --- #### **一、部署规划** 1. **高可用架构** - 控制平面(Control Plane)需部署至少3个节点,通过多副本的 API Server、Scheduler、Controller Manager 避免单点故障。 - 使用负载均衡器(如 HAProxy 或云厂商的 LB)分发流量到 API Server 节点[^1]。 2. **集群网络设计** - 选择成熟的 CNI 插件(如 Calico、Cilium),确保 Pod 间通信和网络策略支持。 - 通过 `NetworkPolicy` 实现微服务间的隔离,例如限制特定命名空间的访问权限[^4]。 --- #### **二、安全配置** 1. **RBAC 权限控制** - 为每个用户或服务账户分配最小权限,例如: ```yaml apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: dev name: pod-reader rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "watch", "list"] ``` - 定期审计权限分配,避免过度授权[^1]。 2. **镜像与运行时安全** - 使用私有镜像仓库(如 Harbor),并扫描镜像漏洞(Trivy、Clair)。 - 启用 Pod Security Admission,限制特权容器运行。 --- #### **三、可观察性与监控** 1. **Prometheus + Grafana 监控** - 部署 `kube-prometheus-stack` 采集集群指标,包括节点 CPU/内存、Pod 状态、网络流量等。 - 配置告警规则(如节点磁盘压力超过 80% 时触发通知)。 2. **日志聚合** - 使用 EFK(Elasticsearch + Fluentd + Kibana)或 Loki 集中存储日志。 - 通过 `Annotations` 标记关键服务,例如记录部署版本信息。 --- #### **四、资源管理与优化** 1. **资源配额与限制** - 在命名空间中设置 `ResourceQuota`,防止资源耗尽: ```yaml apiVersion: v1 kind: ResourceQuota metadata: name: mem-cpu-quota spec: hard: requests.cpu: "10" requests.memory: 20Gi limits.cpu: "20" limits.memory: 40Gi ``` 2. **自动扩缩容** - 配置 HPA(Horizontal Pod Autoscaler)基于 CPU/内存或自定义指标扩缩 Pod。 - 使用 Cluster Autoscaler 动态调整节点数量(适用于云环境)。 --- #### **五、持续交付与 GitOps** 1. **CI/CD 流水线集成** - 通过 Argo CD 或 Flux 实现 GitOps,将部署配置存储在 Git 仓库中,确保版本可追溯。 - 在流水线中加入自动化测试与金丝雀发布策略[^3]。 2. **配置标准化** - 使用 Helm Charts 或 Kustomize 管理应用配置,避免手动修改 YAML 文件。 --- #### **六、灾难恢复** 1. **定期备份** - 使用 Velero 备份集群资源(如 PV、Deployment)到对象存储(如 S3)。 - 测试备份恢复流程,确保 RTO(恢复时间目标)符合 SLA。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值