找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

368

积分

0

好友

34

主题
发表于 15 小时前 | 查看: 3| 回复: 0

在Kubernetes中,Deployment是管理应用副本的核心对象。它通过控制ReplicaSet来创建和管理一组Pod副本,使我们无需直接操作ReplicaSet。下面我们通过创建一个Nginx应用来演示。

1. 创建Deployment

首先,我们编写一个nginx-deployment.yaml文件。

Deployment、ReplicaSet与Pod的关系图

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.7.9
        ports:
        - containerPort: 80

配置文件解析:

  • apiVersion: 定义API组和版本。
  • kind: 资源类型,这里是Deployment
  • metadata.name: 当前Deployment的名称。
  • spec.replicas: 指定Pod副本数量为3个。
  • spec.template.metadata.labels: 为Pod模板定义标签,需与selector.matchLabels匹配。
  • spec.template.spec.containers: 定义容器规格,包括名称、镜像和暴露端口。

执行以下命令创建Deployment:

kubectl apply -f nginx-deployment.yaml

查看Deployment状态:

kubectl get deploy

查看Pod状态:

kubectl get pod

创建初期,Pod状态可能为ContainerCreating,因为需要从镜像仓库拉取nginx:1.7.9镜像。

Pod创建中

等待片刻后,所有Pod将进入Running状态。

Pod运行中

使用kubectl get pod -o wide可以查看Pod被分配到的节点及集群内部IP。此时,该Nginx服务仅能在Kubernetes集群内部通过IP访问。

查看Pod详情

2. 创建Service

Service为后端的一组Pod提供一个稳定的访问入口,并实现负载均衡。外部请求通过Service访问到匹配标签的Pod实例。

创建nginx-svc.yaml文件:

Service配置示例

apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  type: NodePort
  selector:
    app: nginx
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30565

关键配置spec.selector选择了标签为app: nginx的Pod,这与Deployment中定义的Pod标签一致。

创建Service:

kubectl apply -f nginx-svc.yaml

查看Service:

kubectl get svc

Service列表

由于Service类型设置为NodePort,Kubernetes会在每个节点上开放指定端口(如30565)。现在,我们可以通过浏览器访问<任意节点IP>:30565。Service会将请求负载均衡到后端的3个Pod中。

通过NodePort访问Nginx

3. 应用升级与回滚

3.1 查看当前版本

首先确认当前运行的镜像版本。

kubectl get pod
kubectl describe pod <pod-name>

在输出信息中可以找到Image: nginx:1.7.9

查看Pod镜像版本

3.2 更新镜像

使用kubectl set image命令升级Deployment的镜像版本,--record参数会将此命令记录到发布历史中。

kubectl set image deploy/nginx-deployment nginx=nginx:1.10 --record

执行镜像更新命令

Kubernetes会采用滚动更新策略:逐步启动新版本Pod,并终止旧版本Pod,从而实现不中断服务的灰度发布。执行kubectl get pod观察此过程。

滚动更新过程

稍等片刻,所有Pod将被替换为新版本nginx:1.10

3.3 回滚版本

查看发布历史:

kubectl rollout history deploy/nginx-deployment

查看发布历史

回滚到上一个版本:

kubectl rollout undo deploy/nginx-deployment

或回滚到指定历史版本(例如版本2):

kubectl rollout undo deploy/nginx-deployment --to-revision=2

回滚操作同样采用滚动更新方式,将镜像版本恢复至1.7.9

回滚过程

4. 安装Kubernetes Dashboard

Dashboard是Kubernetes的官方Web管理界面。由于默认镜像仓库k8s.gcr.io在国内访问困难,我们需要先准备镜像。

4.1 准备镜像

在每个节点(包括Master和Node)上执行以下Docker操作,从国内镜像源拉取并重命名镜像。

创建一个dashborad-image.sh脚本文件:

vim dashborad-image.sh

脚本内容:

#!/bin/bash
docker pull registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0
docker tag registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker image rm registry.cn-shanghai.aliyuncs.com/qubit/kubernetes-dashboard-amd64:v1.10.0

赋予脚本执行权限并运行:

chmod +x dashborad-image.sh
sh dashborad-image.sh
4.2 部署Dashboard

使用官方提供的YAML文件部署Dashboard。通常可以从GitHub获取对应版本的recommended.yaml。这里以一份示例配置为例,保存为dashboard.yaml。 (注:YAML内容较长,主要包含ServiceAccount、Role、RoleBinding、Deployment和Service等资源定义。)

创建Dashboard资源:

kubectl create -f dashboard.yaml

默认创建的Service类型为ClusterIP,将其修改为NodePort以便外部访问:

kubectl patch svc kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}' -n kube-system

查看Service分配的节点端口:

kubectl get svc -n kube-system

查看Dashboard Service 如图,端口为31141,访问地址为https://<master_ip>:31141(需使用Firefox浏览器处理自签名证书)。

4.3 创建管理用户

创建一个拥有集群管理员权限的ServiceAccount来登录Dashboard。 创建admin-user.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin
  namespace: kube-system

创建用户并获取Token:

kubectl create -f admin-user.yaml
# 查看ServiceAccount详情,获取Secret名称
kubectl describe serviceaccount admin -n kube-system
# 从Secret中获取Token
kubectl describe secret <secret-name> -n kube-system
4.4 登录Dashboard

使用Firefox浏览器访问https://<master_ip>:31141,选择“高级”->“接受风险并继续”,在登录界面选择“令牌(Token)”,粘贴上一步获取的Token即可登录。

Dashboard登录界面




上一篇:Go泛型实战:基于前缀树实现类型安全的EventBus发布订阅系统
下一篇:Kafka高并发架构实战:详解支撑十万级TPS的4大核心技术
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-10 20:51 , Processed in 0.076096 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表