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 的基本操作,并能够在实际的生产环境中高效地管理容器化应用。

相关推荐
python百炼成钢2 小时前
10.串口
linux·stm32·单片机·嵌入式硬件
Lzc7744 小时前
Linux网络的HTTPS
linux·https
运维李哥不背锅5 小时前
Ansible 模块详解:高效管理你的 IT 基础设施
服务器·网络·ansible
我爱钱因此会努力5 小时前
ansible自动化运维入门篇
linux·运维·服务器·centos·自动化·ansible
CIb0la5 小时前
能保持精神专注的爱好能给生活带来种种积极的转变
运维·学习·生活
九江Mgx5 小时前
用 Go 手搓一个内网 DNS 服务器:从此告别 IP 地址,用域名畅游家庭网络!
golang·dns服务·内网dns
---学无止境---6 小时前
Linux中系统调用sys_symlink和sys_unlink函数的实现
linux
代码程序猿RIP6 小时前
【Etcd 】Etcd 详解以及安装教程
linux·数据库·etcd
tb_first7 小时前
Linux入门1(2/2)
linux