K8S初学小探 | 青训营

2023年 8月 22日 73.7k 0

当你想要在 Kubernetes(K8s)上进行初步探索时,以下是一个适用于初学者的简单指南。这个指南将引导你了解如何在本地设置一个简单的 Kubernetes 集群,并运行一个简单的容器应用程序。

步骤 1:安装 K8S

Minikube 是一个工具,可以在本地创建一个单节点的 Kubernetes 集群,适合初学者进行学习和测试。

  • 在命令行中执行以下步骤来安装 Minikube:

    curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    chmod +x minikube
    sudo mv minikube /usr/local/bin/
    
  • 验证 Minikube 是否已安装并可以运行:

    minikube version
    
  • 步骤 2:启动 Minikube 集群

  • 在命令行中执行以下命令来启动 Minikube 集群:

    minikube start
    
  • 验证 Minikube 是否正在运行:

    minikube status
    
  • 步骤 3:运行一个简单的容器应用程序

  • 创建一个名为 hello-world.yml 的 YAML 文件,其中包含一个 Deployment 和一个 Service:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-world-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: hello-world
      template:
        metadata:
          labels:
            app: hello-world
        spec:
          containers:
          - name: hello-world-container
            image: hello-world
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: hello-world-service
    spec:
      selector:
        app: hello-world
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
    
  • 使用以下命令在 Minikube 集群中部署应用程序:

    kubectl apply -f hello-world.yml
    
  • 验证应用程序是否已部署:

    kubectl get deployments
    
  • 访问应用程序:

    minikube service hello-world-service
    
  • 使用 Kubernetes 的 StatefulSet 来部署有状态的 MySQL 应用是一种常见的做法。StatefulSet 可以保证有状态应用的唯一性和稳定性。以下是如何使用 StatefulSet 部署有状态的 MySQL 应用,并开放 3306 端口,以及如何使用污点(Taint)来保证 MySQL 应用部署在特定的 Node 上的步骤:

    步骤 1:创建 StatefulSet

  • 创建一个名为 mysql-statefulset.yaml 的 YAML 文件,其中包含 StatefulSet 的定义:
  • apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: mysql
    spec:
      replicas: 1
      serviceName: mysql
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
          - name: mysql
            image: mysql:latest
            ports:
            - containerPort: 3306
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: "your-root-password"
            - name: MYSQL_DATABASE
              value: "your-database-name"
      volumeClaimTemplates:
      - metadata:
          name: mysql-pv-claim
        spec:
          accessModes: [ "ReadWriteOnce" ]
          storageClassName: your-storage-class
          resources:
            requests:
              storage: 1Gi
    
  • 替换上面 YAML 文件中的相应字段,如 your-root-passwordyour-database-name 为你自己的值。同时,确保替换 your-storage-class 为你的存储类。

  • 使用以下命令部署 StatefulSet:

  • kubectl apply -f mysql-statefulset.yaml
    

    步骤 2:开放 3306 端口

  • 创建一个名为 mysql-service.yaml 的 YAML 文件,其中包含 Service 的定义,用于暴露 StatefulSet 内的 MySQL 容器:
  • apiVersion: v1
    kind: Service
    metadata:
      name: mysql
    spec:
      selector:
        app: mysql
      ports:
      - protocol: TCP
        port: 3306
        targetPort: 3306
    
  • 使用以下命令创建 Service:
  • kubectl apply -f mysql-service.yaml
    

    步骤 3:使用 Taint 和 Toleration 保证 MySQL 应用部署在特定的 Node 上

  • 根据需要,在你想要部署 MySQL 的 Node 上设置一个污点:
  • kubectl taint nodes  key=value:taint-effect
    

    示例:

    kubectl taint nodes node-1 mysql=true:NoSchedule
    
  • 在 StatefulSet 的定义中,添加 tolerations 字段,以使 StatefulSet 的 Pod 能够容忍该污点:
  • spec:
      template:
        spec:
          tolerations:
          - key: mysql
            operator: "Equal"
            value: "true"
            effect: "NoSchedule"
    
  • 使用以下命令更新 StatefulSet:
  • kubectl apply -f mysql-statefulset.yaml
    

    通过上述步骤,你可以使用 StatefulSet 部署有状态的 MySQL 应用,并且通过 Service 开放 3306 端口,同时使用 Taint 和 Toleration 来确保 MySQL 应用部署在特定的 Node 上。这可以确保 MySQL 实例的稳定性和可靠性。请注意,上述步骤仅为示例,实际操作可能需要根据你的环境和需求进行微调。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论