如何在部署脚本中更新Kubernetes API版本或使用--runtime-config

时间:2016-12-11 22:02:42

标签: azure kubernetes

我需要能够在k8上使用batch/v2alpha1apps/v1alpha1。目前,我正在运行安装了1.5.0-beta.1的群集。我更喜欢在部署脚本中执行此操作,但我能找到的只是字段

"apiVersionDefault": "2016-03-30",
"apiVersionStorage": "2015-06-15",

我无处可以找到用于更新这些日期的日期。 kubernetes文档中还有一些说明,解释了如何在kubes-apiserver上使用--runtime-config标志..所以按照这些,我ssh'd到master,找到kube-apiserver清单文件并将其编辑为看起来像这样:

apiVersion: "v1" kind: "Pod" metadata: name: "kube-apiserver" namespace: "kube-system" labels: tier: control-plane component: kube-apiserver spec: hostNetwork: true containers: - name: "kube-apiserver" image: "gcr.io/google_containers/hyperkube-amd64:v1.5.0-beta.1" command: - "/hyperkube" - "apiserver" - "--admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,ResourceQuota" - "--address=0.0.0.0" - "--allow-privileged" - "--insecure-port=8080" - "--secure-port=443" - "--cloud-provider=azure" - "--cloud-config=/etc/kubernetes/azure.json" - "--service-cluster-ip-range=10.0.0.0/16" - "--etcd-servers=http://127.0.0.1:4001" - "--tls-cert-file=/etc/kubernetes/certs/apiserver.crt" - "--tls-private-key-file=/etc/kubernetes/certs/apiserver.key" - "--client-ca-file=/etc/kubernetes/certs/ca.crt" - "--service-account-key-file=/etc/kubernetes/certs/apiserver.key" - "--v=4" - "--runtime-config=batch/v2alpha1,apps/v1alpha1" volumeMounts: - name: "etc-kubernetes" mountPath: "/etc/kubernetes" - name: "var-lib-kubelet" mountPath: "/var/lib/kubelet" volumes: - name: "etc-kubernetes" hostPath: path: "/etc/kubernetes" - name: "var-lib-kubelet" hostPath: path: "/var/lib/kubelet"

这几乎让我的集群变得困难..所以我现在完全失去了。我将不得不重建集群,所以我更愿意在部署模板中添加它,但实际上任何帮助都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

ACS-Engine集群允许指定您希望覆盖的大多数选项 - 请参阅this document for the cluster definitions。我不认为存在部署后脚本,因为除了K8s版本升级之外,在部署之后,您不希望使用apicontroller和其他k8s组件更改常用选项。为此,ACS-Engine中包含脚本以及各种云提供程序和kubernetes风格的其他选项(即Tectonic具有自动升级机制)。

要在部署ACS-Engine部署的K8s群集后手动覆盖值,您可以在此处手动更新清单:

/etc/kubernetes/manifests/kube-apiserver.yaml
/etc/kubernetes/manifests/kube-controller-manager.yaml
/etc/kubernetes/manifests/kube-scheduler.yaml

并且还在这里更新kubelet中的值(即更新kubernetes的版本):/etc/default/kubelet

当然,在进行这些更改之前,您需要kubectl drain您的节点,重新启动节点,并且一旦节点重新联机并且正常运行kubectl uncordon节点。

很难说为什么你的群集在不知道更多信息的情况下被破坏了。总的来说,我说如果您对可能需要新群集的apiversions和配置进行大量更改可能是最好的。