1 - 设置 Minikube 集群

如何设置 Minikube 集群

前置条件

启动 Minikube 集群

  1. 如果你的项目需要,设置默认虚拟机。

    minikube config set vm-driver [driver_name]
    
  2. 启动集群。如有必要,使用 --kubernetes-version 指定 Kubernetes 1.13.x 或更高版本

    minikube start --cpus=4 --memory=4096
    
  3. 启用 Minikube 仪表板和 ingress 插件。

    # 启用仪表板
    minikube addons enable dashboard
    
    # 启用 ingress
    minikube addons enable ingress
    

安装 Helm v3(可选)

如果你使用 Helm,请安装 Helm v3 客户端

故障排除

通过 kubectl get svc 无法显示负载均衡器的外部 IP 地址。

在 Minikube 中,kubectl get svc 中的 EXTERNAL-IP 对你的服务显示 <pending> 状态。在这种情况下,你可以运行 minikube service [service_name] 来打开你的服务,而无需外部 IP 地址。

$ kubectl get svc
NAME                        TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)            AGE
...
calculator-front-end        LoadBalancer   10.103.98.37     <pending>     80:30534/TCP       25h
calculator-front-end-dapr   ClusterIP      10.107.128.226   <none>        80/TCP,50001/TCP   25h
...

$ minikube service calculator-front-end
|-----------|----------------------|-------------|---------------------------|
| NAMESPACE |         NAME         | TARGET PORT |            URL            |
|-----------|----------------------|-------------|---------------------------|
| default   | calculator-front-end |             | http://192.168.64.7:30534 |
|-----------|----------------------|-------------|---------------------------|
🎉  Opening kubernetes service  default/calculator-front-end in default browser...

相关链接

2 - 设置 KiND 集群

如何设置 KiND 集群

前置条件

安装和配置 KiND

请参阅 KiND 文档进行安装。

如果您使用的是 Docker Desktop,请确保您已配置推荐的设置

配置和创建 KiND 集群

  1. 创建一个名为 kind-cluster-config.yaml 的文件,并粘贴以下内容:

    kind: Cluster
    apiVersion: kind.x-k8s.io/v1alpha4
    nodes:
    - role: control-plane
      kubeadmConfigPatches:
      - |
        kind: InitConfiguration
        nodeRegistration:
          kubeletExtraArgs:
            node-labels: "ingress-ready=true"
      extraPortMappings:
      - containerPort: 80
        hostPort: 8081
        protocol: TCP
      - containerPort: 443
        hostPort: 8443
        protocol: TCP
    - role: worker
    - role: worker
    

    此集群配置:

    • 请求 KiND 启动一个由控制平面和两个工作节点组成的 Kubernetes 集群。
    • 允许后续设置入口。
    • 将容器端口暴露到主机。
  2. 运行 kind create cluster 命令,提供集群配置文件:

    kind create cluster --config kind-cluster-config.yaml
    

    预期输出

    Creating cluster "kind" ...
     ✓ Ensuring node image (kindest/node:v1.21.1) 🖼
     ✓ Preparing nodes 📦 📦 📦
     ✓ Writing configuration 📜
     ✓ Starting control-plane 🕹️
     ✓ Installing CNI 🔌
     ✓ Installing StorageClass 💾
     ✓ Joining worker nodes 🚜
    Set kubectl context to "kind-kind"
    You can now use your cluster with:
    
    kubectl cluster-info --context kind-kind
    
    Thanks for using kind! 😊
    

初始化和运行 Dapr

  1. 在 Kubernetes 中初始化 Dapr。

    dapr init --kubernetes
    

    Dapr 完成初始化后,您可以在集群上使用其核心组件。

  2. 验证 Dapr 组件的状态:

    dapr status -k
    

    预期输出

      NAME                   NAMESPACE    HEALTHY  STATUS   REPLICAS  VERSION  AGE  CREATED
      dapr-sentry            dapr-system  True     Running  1         1.5.1    53s  2021-12-10 09:27.17
      dapr-operator          dapr-system  True     Running  1         1.5.1    53s  2021-12-10 09:27.17
      dapr-sidecar-injector  dapr-system  True     Running  1         1.5.1    53s  2021-12-10 09:27.17
      dapr-dashboard         dapr-system  True     Running  1         0.9.0    53s  2021-12-10 09:27.17
      dapr-placement-server  dapr-system  True     Running  1         1.5.1    52s  2021-12-10 09:27.18
    
  3. 转发端口到 Dapr 仪表板

    dapr dashboard -k -p 9999
    
  4. 导航到 http://localhost:9999 以验证设置成功。

在 Kind Kubernetes 集群上安装 metrics-server

  1. 获取 metrics-server 清单文件

    wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
    
  2. 向 components.yaml 文件添加不安全的 TLS 参数

    metadata:
       labels:
         k8s-app: metrics-server
     spec:
       containers:
       - args:
         - --cert-dir=/tmp
         - --secure-port=4443
         - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
         - --kubelet-use-node-status-port
         - --kubelet-insecure-tls   <==== 添加此行
         - --metric-resolution=15s
         image: k8s.gcr.io/metrics-server/metrics-server:v0.6.2
         imagePullPolicy: IfNotPresent
         livenessProbe:
           failureThreshold: 3
           httpGet:
             path: /livez
    
  3. 应用修改后的清单文件

    kubectl apply -f components.yaml
    

相关链接

3 - 设置 Azure Kubernetes Service (AKS) 集群

了解如何设置 Azure Kubernetes 集群

本指南将引导您完成安装 Azure Kubernetes Service (AKS) 集群的过程。如需更多信息,请参阅快速入门:使用 Azure CLI 部署 AKS 集群

前置条件

部署 AKS 集群

  1. 在终端中,登录到 Azure。

    az login
    
  2. 设置您的默认订阅:

    az account set -s [your_subscription_id]
    
  3. 创建资源组。

    az group create --name [your_resource_group] --location [region]
    
  4. 创建 AKS 集群。若要使用特定版本的 Kubernetes,请使用 --kubernetes-version(需要 1.13.x 或更新版本)。

    az aks create --resource-group [your_resource_group] --name [your_aks_cluster_name] --location [region] --node-count 2 --enable-app-routing --generate-ssh-keys
    
  5. 获取 AKS 集群的访问凭据。

    az aks get-credentials -n [your_aks_cluster_name] -g [your_resource_group]
    

AKS Edge Essentials

若要使用 Azure Kubernetes Service (AKS) Edge Essentials 创建单机 K8s/K3s 仅 Linux 集群,您可以参阅AKS Edge Essentials 快速入门指南

相关链接

4 - 设置 Google Kubernetes Engine (GKE) 集群

设置 Google Kubernetes Engine 集群

前置条件

创建新集群

通过运行以下命令创建 GKE 集群:

$ gcloud services enable container.googleapis.com && \
  gcloud container clusters create $CLUSTER_NAME \
  --zone $ZONE \
  --project $PROJECT_ID

更多选项:

私有 GKE 集群的边车注入

私有集群的边车注入需要额外步骤。

在私有 GKE 集群中,为 master 访问自动创建的防火墙规则不会打开端口 4000,而 Dapr 需要该端口进行边车注入。

查看相关的防火墙规则:

$ gcloud compute firewall-rules list --filter="name~gke-${CLUSTER_NAME}-[0-9a-z]*-master"

替换现有规则并允许 Kubernetes master 访问端口 4000:

$ gcloud compute firewall-rules update <firewall-rule-name> --allow tcp:10250,tcp:443,tcp:4000

获取 kubectl 凭据

运行以下命令获取凭据:

$ gcloud container clusters get-credentials $CLUSTER_NAME \
    --zone $ZONE \
    --project $PROJECT_ID

安装 Helm v3(可选)

如果您使用 Helm,请安装 Helm v3 客户端

故障排查

Kubernetes dashboard 权限

假设您收到类似以下的错误消息:

configmaps is forbidden: User "system:serviceaccount:kube-system:kubernetes-dashboard" cannot list configmaps in the namespace "default"

执行此命令:

kubectl create clusterrolebinding kubernetes-dashboard -n kube-system --clusterrole=cluster-admin --serviceaccount=kube-system:kubernetes-dashboard

相关链接

5 - 设置 Elastic Kubernetes Service (EKS) 集群

了解如何设置 EKS 集群

本指南将引导您完成安装 Elastic Kubernetes Service (EKS) 集群的过程。如需更多信息,请参阅创建 Amazon EKS 集群

前置条件

部署 EKS 集群

  1. 在终端中登录 AWS。

    aws configure
    
  2. 创建一个名为 cluster-config.yaml 的新文件并添加以下内容,将 [your_cluster_name][your_cluster_region][your_k8s_version] 替换为适当的值:

    apiVersion: eksctl.io/v1alpha5
    kind: ClusterConfig
    
    metadata:
      name: [your_cluster_name]
      region: [your_cluster_region]
      version: [your_k8s_version]
      tags:
        karpenter.sh/discovery: [your_cluster_name]
    
    iam:
      withOIDC: true
    
    managedNodeGroups:
      - name: mng-od-4vcpu-8gb
        desiredCapacity: 2
        minSize: 1
        maxSize: 5
        instanceType: c5.xlarge
        privateNetworking: true
    
    addons:
      - name: vpc-cni 
        attachPolicyARNs:
          - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
      - name: coredns
        version: latest 
      - name: kube-proxy
        version: latest
      - name: aws-ebs-csi-driver
        wellKnownPolicies: 
          ebsCSIController: true
    
  3. 通过运行以下命令创建集群:

    eksctl create cluster -f cluster-config.yaml
    
  4. 验证 kubectl 上下文:

    kubectl config current-context
    

添加 Dapr 的边车访问和默认存储类要求

  1. 更新安全组规则以允许 EKS 集群与 Dapr 边车通信,为端口 4000 创建入站规则。

    aws ec2 authorize-security-group-ingress --region [your_aws_region] \
    --group-id [your_security_group] \
    --protocol tcp \
    --port 4000 \
    --source-group [your_security_group]
    
  2. 如果您没有默认存储类,请添加一个:

kubectl patch storageclass gp2 -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

安装 Dapr

通过运行以下命令在集群上安装 Dapr:

dapr init -k

您应该看到以下响应:

⌛  Making the jump to hyperspace...
ℹ️  Note: To install Dapr using Helm, see here: https://docs.dapr.io/getting-started/install-dapr-kubernetes/#install-with-helm-advanced

ℹ️  Container images will be pulled from Docker Hub
✅  Deploying the Dapr control plane with latest version to your cluster...
✅  Deploying the Dapr dashboard with latest version to your cluster...
✅  Success! Dapr has been installed to namespace dapr-system. To verify, run `dapr status -k' in your terminal. To get started, go here: https://docs.dapr.io/getting-started

服务账户的 IAM 角色 (IRSA)

您可以为 dapr_rbac Helm 子图表创建的 ServiceAccounts 附加自定义注解——这对于在 AWS EKS 上启用服务账户的 IAM 角色 (IRSA) 非常有用。 这可以通过 EKS 的 IRSA 机制为 Dapr 组件启用细粒度的安全访问控制。 更新您的 Dapr Helm 值文件以包含以下 ServiceAccounts 所需的注解。

有关 AWS 身份验证的更多信息,请参阅此处

serviceAccount:
  operator:
    annotations:
      eks.amazonaws.com/role-arn: arn:aws:iam::<ACCOUNT_ID>:role/operator-role
  injector:
    annotations: {}
  placement:
    annotations: {}
  scheduler:
    annotations: {}
  sentry:
    annotations: {}

故障排除

访问权限

如果遇到任何访问权限问题,请确保您使用的是创建集群时所用的同一 AWS 配置文件。如需要,请使用正确的配置文件更新 kubectl 配置。更多信息请参见此处

aws eks --region [your_aws_region] update-kubeconfig --name [your_eks_cluster_name] --profile [your_profile_name]

相关链接