This is the multi-page printable view of this section. Click here to print.
Kubernetes 集群设置
1 - 设置 Minikube 集群
前置条件
- 安装:
- 对于 Windows:
- 在 BIOS 中启用虚拟化
- 安装 Hyper-V
Note
有关支持的驱动程序以及如何安装插件的详细信息,请参阅 官方 Minikube 驱动程序文档。启动 Minikube 集群
如果你的项目需要,设置默认虚拟机。
minikube config set vm-driver [driver_name]启动集群。如有必要,使用
--kubernetes-version指定 Kubernetes 1.13.x 或更高版本minikube start --cpus=4 --memory=4096启用 Minikube 仪表板和 ingress 插件。
# 启用仪表板 minikube addons enable dashboard # 启用 ingress minikube addons enable ingress
安装 Helm v3(可选)
如果你使用 Helm,请安装 Helm v3 客户端。
Important
最新的 Dapr Helm chart 不再支持 Helm v2。从 Helm v2 迁移到 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 集群
前置条件
- 安装:
- 对于 Windows:
- 在 BIOS 中启用虚拟化
- 安装 Hyper-V
安装和配置 KiND
如果您使用的是 Docker Desktop,请确保您已配置推荐的设置。
配置和创建 KiND 集群
创建一个名为
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 集群。
- 允许后续设置入口。
- 将容器端口暴露到主机。
运行
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
在 Kubernetes 中初始化 Dapr。
dapr init --kubernetesDapr 完成初始化后,您可以在集群上使用其核心组件。
验证 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转发端口到 Dapr 仪表板:
dapr dashboard -k -p 9999导航到
http://localhost:9999以验证设置成功。
在 Kind Kubernetes 集群上安装 metrics-server
获取 metrics-server 清单文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml向 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应用修改后的清单文件
kubectl apply -f components.yaml
相关链接
3 - 设置 Azure Kubernetes Service (AKS) 集群
本指南将引导您完成安装 Azure Kubernetes Service (AKS) 集群的过程。如需更多信息,请参阅快速入门:使用 Azure CLI 部署 AKS 集群
前置条件
部署 AKS 集群
在终端中,登录到 Azure。
az login设置您的默认订阅:
az account set -s [your_subscription_id]创建资源组。
az group create --name [your_resource_group] --location [region]创建 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获取 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 快速入门指南。
注意
AKS Edge Essentials 默认不提供存储类,这可能会导致部署 Dapr 时出现问题。为避免此问题,请确保在部署 Dapr 之前在集群上启用 local-path-provisioner 存储类。如需更多信息,请参阅AKS EE 上的 Local Path Provisioner。相关链接
4 - 设置 Google Kubernetes Engine (GKE) 集群
前置条件
创建新集群
通过运行以下命令创建 GKE 集群:
$ gcloud services enable container.googleapis.com && \
gcloud container clusters create $CLUSTER_NAME \
--zone $ZONE \
--project $PROJECT_ID
更多选项:
- 参考 Google Cloud SDK 文档。
- 通过 Cloud Console 创建集群以获得更具交互性的体验。
私有 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 客户端。
重要
最新的 Dapr Helm chart 不再支持 Helm v2。从 Helm v2 迁移到 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) 集群
本指南将引导您完成安装 Elastic Kubernetes Service (EKS) 集群的过程。如需更多信息,请参阅创建 Amazon EKS 集群
前置条件
部署 EKS 集群
在终端中登录 AWS。
aws configure创建一个名为
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通过运行以下命令创建集群:
eksctl create cluster -f cluster-config.yaml验证 kubectl 上下文:
kubectl config current-context
添加 Dapr 的边车访问和默认存储类要求
更新安全组规则以允许 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]如果您没有默认存储类,请添加一个:
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]