k8s服务搭建与实战案例

Kubernetes(K8s)作为一个开源的容器编排平台,广泛应用于现代的云原生应用架构中。以下是一些常见的 **Kubernetes 实战案例**,包括从基础部署到高级应用场景的使用。通过这些案例,可以更好地理解 K8s 的运作原理和最佳实践。


1. **部署一个简单的 Web 应用(Nginx)**

这是一个常见的入门级案例,适合刚接触 Kubernetes 的开发者。

步骤:

  1. **创建一个 Deployment**

```yaml

 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:latest
           ports:
           - containerPort: 80

```

  1. **创建一个 Service 来暴露应用**

```yaml

apiVersion: v1
   kind: Service
   metadata:
     name: nginx-service
   spec:
     selector:
       app: nginx
     ports:
       - protocol: TCP
         port: 80
         targetPort: 80
     type: LoadBalancer

```

  1. **部署应用到 Kubernetes 集群**

```bash

  kubectl apply -f nginx-deployment.yaml
   kubectl apply -f nginx-service.yaml

```

  1. **验证部署**

```bash

 kubectl get deployments
   kubectl get pods
   kubectl get services

```

通过这个案例,你可以学习如何部署一个简单的 Web 应用,如何利用 `Deployment` 和 `Service` 来实现容器管理和应用的暴露。


2. **自动扩容应用(Horizontal Pod Autoscaler)**

在生产环境中,应用的流量和负载是动态变化的,K8s 提供了 Horizontal Pod Autoscaler(HPA)来根据负载自动扩容和缩容 Pod。

步骤:

  1. **创建一个 Deployment(例如一个基于 CPU 使用率扩容的 Nginx 部署)**

```yaml

 apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: nginx-deployment
   spec:
     replicas: 2
     selector:
       matchLabels:
         app: nginx
     template:
       metadata:
         labels:
           app: nginx
       spec:
         containers:
         - name: nginx
           image: nginx:latest
           resources:
             requests:
               cpu: 100m
               memory: 100Mi
             limits:
               cpu: 500m
               memory: 500Mi
           ports:
           - containerPort: 80

```

  1. **创建 HPA 对象**

```yaml

  apiVersion: autoscaling/v2
   kind: HorizontalPodAutoscaler
   metadata:
     name: nginx-hpa
   spec:
     scaleTargetRef:
       apiVersion: apps/v1
       kind: Deployment
       name: nginx-deployment
     minReplicas: 2
     maxReplicas: 10
     metrics:
     - type: Resource
       resource:
         name: cpu
         target:
           type: Utilization
           averageUtilization: 50

```

  1. **部署 HPA**

```bash

  kubectl apply -f nginx-hpa.yaml

```

  1. **监控 HPA 状态**

```bash

kubectl get hpa

```

通过这个案例,你可以学习如何使用 HPA 来动态扩容和缩容 Pod,确保应用在不同负载下的高可用性。


3. **基于 Helm 安装和管理应用**

Helm 是 Kubernetes 的包管理工具,可以方便地管理复杂应用的部署和版本控制。

步骤:

  1. **安装 Helm**

```bash

 curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

```

  1. **添加 Helm 仓库**

```bash

 helm repo add stable https://charts.helm.sh/stable
   helm repo update

```

  1. **使用 Helm 安装应用(例如安装 MySQL)**

```bash

 helm install my-mysql stable/mysql

```

  1. **查看安装的应用**

```bash

 helm list

```

  1. **删除 Helm 安装的应用**

```bash

 helm uninstall my-mysql

```

通过这个案例,你可以学习如何使用 Helm 来简化应用的安装、更新和管理,尤其是在多环境部署时非常有用。


4. **使用 Persistent Volumes 和 Persistent Volume Claims**

Kubernetes 提供了持久化存储(Persistent Volumes, PV)和持久化存储声明(Persistent Volume Claims, PVC),用来管理应用的持久化数据存储。

步骤:

  1. **创建一个 Persistent Volume(PV)**

```yaml

  apiVersion: v1
   kind: PersistentVolume
   metadata:
     name: my-pv
   spec:
     capacity:
       storage: 1Gi
     accessModes:
       - ReadWriteOnce
     hostPath:
       path: /mnt/data
  1. **创建 Persistent Volume Claim(PVC)**

```yaml

   apiVersion: v1
   kind: PersistentVolumeClaim
   metadata:
     name: my-pvc
   spec:
     resources:
       requests:
         storage: 1Gi
     accessModes:
       - ReadWriteOnce

```

  1. **在 Pod 中使用 PVC**

```yaml

  apiVersion: v1
   kind: Pod
   metadata:
     name: nginx-pod
   spec:
     containers:
     - name: nginx
       image: nginx
       volumeMounts:
       - mountPath: /usr/share/nginx/html
         name: nginx-storage
     volumes:
     - name: nginx-storage
       persistentVolumeClaim:
         claimName: my-pvc

```

  1. **部署应用**

```bash

  kubectl apply -f pv.yaml
   kubectl apply -f pvc.yaml
   kubectl apply -f nginx-pod.yaml

```

通过这个案例,你可以了解如何配置 Kubernetes 中的持久化存储,使应用能够在容器重启或迁移时保持数据。


5. **使用 Ingress 实现 HTTP 路由和负载均衡**

Ingress 允许你配置 HTTP 路由和负载均衡,能够将外部流量路由到 Kubernetes 集群内的不同服务。

步骤:

  1. **创建一个 Ingress Controller(例如使用 Nginx)**

```bash

   kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml

```

  1. **创建一个 Deployment 和 Service(例如部署两个不同版本的 Web 应用)**

```yaml

   apiVersion: apps/v1
   kind: Deployment
   metadata:
     name: webapp-v1
   spec:
     replicas: 1
     selector:
       matchLabels:
         app: webapp-v1
     template:
       metadata:
         labels:
           app: webapp-v1
       spec:
         containers:
         - name: webapp
           image: webapp:v1
           ports:
           - containerPort: 80

```

  1. **创建 Ingress 规则**

```yaml

  apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: webapp-ingress
   spec:
     rules:
     - host: webapp.example.com
       http:
         paths:
         - path: /v1
           pathType: Prefix
           backend:
             service:
               name: webapp-service-v1
               port:
                 number: 80

```

  1. **应用配置**

```bash

   kubectl apply -f webapp-deployment.yaml
   kubectl apply -f ingress.yaml

```

通过这个案例,你可以学习如何使用 Ingress 配置 HTTP 路由、负载均衡和 SSL/TLS 终端节点。

---

总结

以上是一些常见的 Kubernetes 实战案例,涵盖了应用的部署、扩容、管理、持久化存储和流量路由等方面。学习这些案例有助于你熟练掌握 Kubernetes 的基本操作,并能够在实际的生产环境中高效地管理容器化应用。

相关推荐
元气满满的热码式4 分钟前
Centos7.9安装docker
运维·docker·容器
China_Yanhy14 分钟前
[k8s]报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock
docker·kubernetes·unix
whoami-441 分钟前
Linux基础入门
linux·运维·服务器
꧁༺朝花夕逝༻꧂1 小时前
tomcat的安装以及配置(基于linuxOS)
java·服务器·tomcat
weixin_387545641 小时前
从 MeshConfig 迁移到 Istio Telemetry API:提升网格观测性和灵活性
java·运维·前端·python·istio
zym大哥大1 小时前
Shell自定义(二)
linux·windows
吹老师个人app编程教学1 小时前
clickhouse-副本和分片
java·服务器·clickhouse
码农秃头老李1 小时前
系列1:基于Centos-8.6部署Kubernetes (1.24-1.30)
linux·kubernetes·centos
魏 无羡1 小时前
linux CentOS系统上卸载Kubernetes(k8s)
linux·kubernetes·centos