This is the multi-page printable view of this section. Click here to print.
Kubernetes 集群配置
1 - 设置 Minikube 集群
前提条件
- 安装:
- 对于 Windows:
- 在 BIOS 中启用虚拟化
- 安装 Hyper-V
注意
查看 [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 客户端。
重要
最新的 Dapr Helm chart 不再支持 Helm v2。从 Helm v2 迁移到 Helm v3。故障排除
负载均衡器的外部 IP 地址在 kubectl get svc
中未显示。
在 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 |
|-----------|----------------------|-------------|---------------------------|
🎉 正在默认浏览器中打开 Kubernetes 服务 default/calculator-front-end...
相关链接
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
此集群配置:
- 启动一个由控制平面和两个工作节点组成的 Kubernetes 集群。
- 方便将来设置 Ingress。
- 将容器端口映射到主机。
运行
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 --kubernetes
Dapr 初始化完成后,您可以在集群上使用其核心组件。
验证 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 服务 (AKS) 集群
本指南将引导您安装 Azure Kubernetes 服务 (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] --node-count 2 --enable-addons http_application_routing --generate-ssh-keys
获取 AKS 集群的访问凭据。
az aks get-credentials -n [your_aks_cluster_name] -g [your_resource_group]
AKS Edge Essentials
要使用 Azure Kubernetes 服务 (AKS) Edge Essentials 创建单机 K8s/K3s Linux-only 集群,您可以按照 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 集群的 Sidecar 注入
私有集群的 Sidecar 注入需要额外步骤。
在私有 GKE 集群中,自动创建的主访问防火墙规则未开放 Dapr 所需的 4000 端口用于 Sidecar 注入。
查看相关的防火墙规则:
$ gcloud compute firewall-rules list --filter="name~gke-${CLUSTER_NAME}-[0-9a-z]*-master"
更新现有规则以允许 Kubernetes 主节点访问 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 仪表板权限
如果您收到类似以下的错误消息:
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 - 配置弹性Kubernetes服务(EKS)集群
本指南将引导您配置一个弹性Kubernetes服务(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.yaml
验证kubectl上下文:
kubectl config current-context
为sidecar访问和默认存储类添加Dapr要求:
更新安全组规则,创建端口4000的入站规则,以允许EKS集群与Dapr sidecar通信。
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
故障排除
访问权限
如果您遇到访问权限问题,请确保您使用的是创建集群时使用的相同AWS配置文件。如有需要,使用正确的配置文件更新kubectl配置。更多信息请参考这里:
aws eks --region [your_aws_region] update-kubeconfig --name [your_eks_cluster_name] --profile [your_profile_name]