From baee00d72f8fc2742b8912ac9b6ab30998e1879e Mon Sep 17 00:00:00 2001 From: trevor tao Date: Sun, 30 Jun 2019 22:25:44 +0800 Subject: [PATCH] Use Multi-arch etcd yaml to support Calico Change the separate etcd-arm64.yaml and etcd-amd64.yaml to a single multi-arch supported etcd.yaml to simply the Calico install. Change-Id: I2750213235043f9ad7411e8211beb58214487386 Signed-off-by: trevor tao --- src/foundation/scripts/cni/calico/etcd-amd64.yaml | 83 ---------------------- .../cni/calico/{etcd-arm64.yaml => etcd.yaml} | 69 +++++++++++++++++- src/foundation/scripts/setup-cni.sh | 6 +- 3 files changed, 69 insertions(+), 89 deletions(-) delete mode 100644 src/foundation/scripts/cni/calico/etcd-amd64.yaml rename src/foundation/scripts/cni/calico/{etcd-arm64.yaml => etcd.yaml} (53%) diff --git a/src/foundation/scripts/cni/calico/etcd-amd64.yaml b/src/foundation/scripts/cni/calico/etcd-amd64.yaml deleted file mode 100644 index e3d0aa3..0000000 --- a/src/foundation/scripts/cni/calico/etcd-amd64.yaml +++ /dev/null @@ -1,83 +0,0 @@ -# This manifest installs the Calico etcd on the kubeadm master. This uses a DaemonSet -# to force it to run on the master even when the master isn't schedulable, and uses -# nodeSelector to ensure it only runs on the master. -apiVersion: extensions/v1beta1 -kind: DaemonSet -metadata: - name: calico-etcd - namespace: kube-system - labels: - k8s-app: calico-etcd -spec: - template: - metadata: - labels: - k8s-app: calico-etcd - annotations: - # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler - # reserves resources for critical add-on pods so that they can be rescheduled after - # a failure. This annotation works in tandem with the toleration below. - scheduler.alpha.kubernetes.io/critical-pod: '' - spec: - tolerations: - # This taint is set by all kubelets running `--cloud-provider=external` - # so we should tolerate it to schedule the Calico pods - - key: node.cloudprovider.kubernetes.io/uninitialized - value: "true" - effect: NoSchedule - # Allow this pod to run on the master. - - key: node-role.kubernetes.io/master - effect: NoSchedule - # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. - # This, along with the annotation above marks this pod as a critical add-on. - - key: CriticalAddonsOnly - operator: Exists - # Only run this pod on the master. - nodeSelector: - node-role.kubernetes.io/master: "" - hostNetwork: true - containers: - - name: calico-etcd - image: quay.io/coreos/etcd:v3.3.9 - env: - - name: CALICO_ETCD_IP - valueFrom: - fieldRef: - fieldPath: status.podIP - command: - - /usr/local/bin/etcd - args: - - --name=calico - - --data-dir=/var/etcd/calico-data - - --advertise-client-urls=http://$(CALICO_ETCD_IP):6666 - - --listen-client-urls=http://0.0.0.0:6666 - - --listen-peer-urls=http://0.0.0.0:6667 - - --auto-compaction-retention=1 - volumeMounts: - - name: var-etcd - mountPath: /var/etcd - volumes: - - name: var-etcd - hostPath: - path: /var/etcd - ---- - -# This manifest installs the Service which gets traffic to the Calico -# etcd. -apiVersion: v1 -kind: Service -metadata: - labels: - k8s-app: calico-etcd - name: calico-etcd - namespace: kube-system -spec: - # Select the calico-etcd pod running on the master. - selector: - k8s-app: calico-etcd - # This ClusterIP needs to be known in advance, since we cannot rely - # on DNS to get access to etcd. - clusterIP: 10.96.232.136 - ports: - - port: 6666 diff --git a/src/foundation/scripts/cni/calico/etcd-arm64.yaml b/src/foundation/scripts/cni/calico/etcd.yaml similarity index 53% rename from src/foundation/scripts/cni/calico/etcd-arm64.yaml rename to src/foundation/scripts/cni/calico/etcd.yaml index 940525f..36da3ab 100644 --- a/src/foundation/scripts/cni/calico/etcd-arm64.yaml +++ b/src/foundation/scripts/cni/calico/etcd.yaml @@ -1,10 +1,11 @@ +--- # This manifest installs the Calico etcd on the kubeadm master. This uses a DaemonSet # to force it to run on the master even when the master isn't schedulable, and uses # nodeSelector to ensure it only runs on the master. apiVersion: extensions/v1beta1 kind: DaemonSet metadata: - name: calico-etcd + name: calico-etcd-arm64 namespace: kube-system labels: k8s-app: calico-etcd @@ -35,6 +36,7 @@ spec: # Only run this pod on the master. nodeSelector: node-role.kubernetes.io/master: "" + beta.kubernetes.io/arch: arm64 hostNetwork: true containers: - name: calico-etcd @@ -63,6 +65,71 @@ spec: hostPath: path: /var/etcd +--- +# This manifest installs the Calico etcd on the kubeadm master. This uses a DaemonSet +# to force it to run on the master even when the master isn't schedulable, and uses +# nodeSelector to ensure it only runs on the master. +apiVersion: extensions/v1beta1 +kind: DaemonSet +metadata: + name: calico-etcd-amd64 + namespace: kube-system + labels: + k8s-app: calico-etcd +spec: + template: + metadata: + labels: + k8s-app: calico-etcd + annotations: + # Mark this pod as a critical add-on; when enabled, the critical add-on scheduler + # reserves resources for critical add-on pods so that they can be rescheduled after + # a failure. This annotation works in tandem with the toleration below. + scheduler.alpha.kubernetes.io/critical-pod: '' + spec: + tolerations: + # This taint is set by all kubelets running `--cloud-provider=external` + # so we should tolerate it to schedule the Calico pods + - key: node.cloudprovider.kubernetes.io/uninitialized + value: "true" + effect: NoSchedule + # Allow this pod to run on the master. + - key: node-role.kubernetes.io/master + effect: NoSchedule + # Allow this pod to be rescheduled while the node is in "critical add-ons only" mode. + # This, along with the annotation above marks this pod as a critical add-on. + - key: CriticalAddonsOnly + operator: Exists + # Only run this pod on the master. + nodeSelector: + node-role.kubernetes.io/master: "" + beta.kubernetes.io/arch: amd64 + hostNetwork: true + containers: + - name: calico-etcd + image: quay.io/coreos/etcd:v3.3.9 + env: + - name: CALICO_ETCD_IP + valueFrom: + fieldRef: + fieldPath: status.podIP + command: + - /usr/local/bin/etcd + args: + - --name=calico + - --data-dir=/var/etcd/calico-data + - --advertise-client-urls=http://$(CALICO_ETCD_IP):6666 + - --listen-client-urls=http://0.0.0.0:6666 + - --listen-peer-urls=http://0.0.0.0:6667 + - --auto-compaction-retention=1 + volumeMounts: + - name: var-etcd + mountPath: /var/etcd + volumes: + - name: var-etcd + hostPath: + path: /var/etcd + --- # This manifest installs the Service which gets traffic to the Calico diff --git a/src/foundation/scripts/setup-cni.sh b/src/foundation/scripts/setup-cni.sh index 30bc841..55953a2 100755 --- a/src/foundation/scripts/setup-cni.sh +++ b/src/foundation/scripts/setup-cni.sh @@ -16,11 +16,7 @@ SCRIPTS_DIR=$(dirname "${BASH_SOURCE[0]}") install_calico(){ # Install the Etcd Database - if [ "$(uname -m)" == 'aarch64' ]; then - ETCD_YAML=etcd-arm64.yaml - else - ETCD_YAML=etcd-amd64.yaml - fi + ETCD_YAML=etcd.yaml sed -i "s/10.96.232.136/${CLUSTER_IP}/" "${SCRIPTS_DIR}/cni/calico/${ETCD_YAML}" kubectl apply -f "${SCRIPTS_DIR}/cni/calico/${ETCD_YAML}" -- 2.16.6