0

我正在尝试将 Istio 与自动边车注入安装到 Kubernetes 中。我的环境由三个主节点和两个节点组成,并使用 Azure 容器服务市场产品在 Azure 上构建。

按照位于此处的文档,到目前为止,我已启用RBACDynamicAdmissionControl. 我通过/etc/kubernetes/istio-inializer.yaml在 Kubernetes Master 上进行修改来实现这一点,方法是添加以下红色标出的内容,然后使用 Unix 命令重新启动 Kubernetes Master reboot,.

文档中的下一步是使用kubectl. 我假设文档打算让用户cd在此步骤之前克隆 Istio 存储库并将其放入其中,但未提及。

git clone https://github.com/istio/istio.git
cd istio
kubectl apply -f install/kubernetes/istio-initializer.yaml

之后发生以下错误:

user@hostname:~/istio$ kubectl apply -f install/kubernetes/istio-initializer.yaml

configmap "istio-inject" configured
serviceaccount "istio-initializer-service-account" configured
error: error validating "install/kubernetes/istio-initializer.yaml": error validating data: found invalid field initializers for v1.ObjectMeta; if you choose to ignore these errors, turn validation off with --validate=false

如果我尝试kubectl apply使用提到的标志执行validate=false,则会生成此错误:

user@hostname:~/istio$ kubectl apply -f install/kubernetes/istio-initializer.yaml --validate=false

configmap "istio-inject" configured
serviceaccount "istio-initializer-service-account" configured
deployment "istio-initializer" configured
error: unable to recognize "install/kubernetes/istio-initializer.yaml": no matches for admissionregistration.k8s.io/, Kind=InitializerConfiguration

我不知道从这里去哪里。该问题似乎与该admissionregistration.k8s.io/v1alpha1块中的块有关,yaml但我不确定该块中具体有什么不正确的。

apiVersion: admissionregistration.k8s.io/v1alpha1
kind: InitializerConfiguration
metadata:
  name: istio-sidecar
initializers:
  - name: sidecar.initializer.istio.io
    rules:
      - apiGroups:
          - "*"
        apiVersions:
          - "*"
        resources:
          - deployments
          - statefulsets
          - jobs
          - daemonsets

安装的 Kubernetes 版本:

user@hostname:~/istio$ kubectl version
Client Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.6", GitCommit:"7fa1c1756d8bc963f1a389f4a6937dc71f08ada2", GitTreeState:"clean", BuildDate:"2017-06-16T18:21:54Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"6", GitVersion:"v1.6.6", GitCommit:"7fa1c1756d8bc963f1a389f4a6937dc71f08ada2", GitTreeState:"clean", BuildDate:"2017-06-16T18:21:54Z", GoVersion:"go1.7.6", Compiler:"gc", Platform:"linux/amd64"}

我怀疑这是版本不匹配。作为后续问题,是否可以使用 ACS 将 kubernetes >= 1.7.4 的版本部署到 Azure?

我对使用 Kubernetes 还很陌生,所以如果有人能提供帮助,我将不胜感激。感谢您的时间。

4

1 回答 1

1

似乎是一个版本控制问题,因为 k8s 版本> 1.7 支持 alpha 功能,如此处所述(https://kubernetes.io/docs/admin/extensible-admission-controllers/#what-are-initializers)。

1.7 引入了两个 alpha 功能,即初始化程序和外部准入
Webhook,它们解决了这些限制。这些特性允许准入控制器在树外开发并在运行时配置。

并且可以将 kubernetes >= 1.7.4 的版本部署到 Azure。请注意使用门户网站部署的版本。但是如果使用 acs-egnine 生成 ARM 模板,则可以部署 1.7.5 版本的集群。

您可以参考这里的过程https://github.com/Azure/acs-engine。基本上它包括三个步骤。首先,您应该参考 clusterDefinition 部分创建 json 文件。要使用版本 1.7.5,您应该将属性“orchestratorRelaease”指定为“1.7”,并通过将属性“enableRbac”指定为 true 来启用 RBAC。其次,使用 acs 引擎(版本 >= 0.6.0)将 json 文件解析为 ARM 模板(应创建 azuredeploy.json & azuredeploy.parameters.json)。最后,在 powershell 中使用命令“New-AzureRmResourceGroupDeployment”将集群部署到 Azure。

希望这可以帮助 :)

于 2017-09-28T17:15:34.337 回答