我试图安装带有自动侧车注入的Istio进入Kubernetes。我的环境由三个主服务器和两个节点组成,并使用Azure容器服务市场产品在Azure上构建。
根据位于here的文档,我到目前为止已启用RBAC
和DynamicAdmissionControl
。我通过添加following content outlined in red然后使用Unix命令/etc/kubernetes/istio-inializer.yaml
重新启动Kubernetes Master来修改Kubernetes Master上的reboot
来完成此操作。
文档中的下一步是使用kubectl
应用yaml。我假设文档打算让用户在此步骤之前克隆Istio存储库并cd
,但这是未提及的。
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工作相当新,所以如果有人能提供帮助我会非常感激。感谢您的时间。
答案 0 :(得分:1)
似乎是版本控制问题,因为k8s版本支持alpha功能>这里提到的1.7(https://kubernetes.io/docs/admin/extensible-admission-controllers/#what-are-initializers)。
1.7引入了两个alpha功能,Initializers和External Admission
Webhooks,解决了这些限制。这些功能允许入场 要在树外开发并在运行时配置的控制器。
可以将一个版本的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。
希望这有帮助:)