porkadot 0.2.2 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/hack/gen-storage-version-migrator.sh +7 -0
  3. data/hack/storage-version-migrator/kustomization.yaml +77 -0
  4. data/lib/porkadot/assets.rb +9 -0
  5. data/lib/porkadot/assets/bootstrap/manifests/kube-apiserver.bootstrap.yaml.erb +4 -30
  6. data/lib/porkadot/assets/bootstrap/manifests/kube-controller-manager.bootstrap.yaml.erb +13 -16
  7. data/lib/porkadot/assets/bootstrap/manifests/kube-proxy.bootstrap.yaml.erb +3 -2
  8. data/lib/porkadot/assets/bootstrap/manifests/kube-scheduler.bootstrap.yaml.erb +3 -5
  9. data/lib/porkadot/assets/etcd/etcd-server.yaml.erb +2 -0
  10. data/lib/porkadot/assets/kubelet.rb +1 -0
  11. data/lib/porkadot/assets/kubelet/config.yaml.erb +3 -0
  12. data/lib/porkadot/assets/kubelet/install-deps.sh.erb +11 -0
  13. data/lib/porkadot/assets/kubelet/install-pkgs.sh.erb +19 -2
  14. data/lib/porkadot/assets/kubelet/kubelet.service.erb +3 -1
  15. data/lib/porkadot/assets/kubelet/setup-containerd.sh.erb +10 -0
  16. data/lib/porkadot/assets/kubernetes.rb +4 -1
  17. data/lib/porkadot/assets/kubernetes/manifests/coredns.yaml.erb +209 -0
  18. data/lib/porkadot/assets/kubernetes/manifests/dns-horizontal-autoscaler.yaml.erb +110 -0
  19. data/lib/porkadot/assets/kubernetes/manifests/flannel.yaml.erb +52 -431
  20. data/lib/porkadot/assets/kubernetes/manifests/kube-scheduler.yaml.erb +1 -1
  21. data/lib/porkadot/assets/kubernetes/manifests/kubelet-rubber-stamp.yaml.erb +12 -3
  22. data/lib/porkadot/assets/kubernetes/manifests/metallb.secrets.yaml.erb +13 -0
  23. data/lib/porkadot/assets/kubernetes/manifests/metallb.yaml.erb +116 -26
  24. data/lib/porkadot/assets/kubernetes/manifests/porkadot.yaml.erb +23 -0
  25. data/lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb +357 -0
  26. data/lib/porkadot/cmd/cli.rb +16 -0
  27. data/lib/porkadot/cmd/render/certs.rb +1 -1
  28. data/lib/porkadot/configs/certs/k8s.rb +6 -0
  29. data/lib/porkadot/configs/kubernetes.rb +30 -1
  30. data/lib/porkadot/default.yaml +4 -3
  31. data/lib/porkadot/install/kubelet.rb +24 -0
  32. data/lib/porkadot/version.rb +1 -1
  33. metadata +9 -3
  34. data/lib/porkadot/assets/kubernetes/manifests/pod-checkpointer.yaml.erb +0 -130
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 958ab6006bc337cbefb89951fcc80af8f32d4799dcf6f7090a68c7901743d2df
4
- data.tar.gz: 1b9b98c07b61d6d3ed29879e81983a65637228be7ca494d4cff45a34cd64d08e
3
+ metadata.gz: 834e1f31cbbf8c7c8766162945572512fc0311dbf772df008f85ef2a00b3ea3d
4
+ data.tar.gz: f453e7a4899673f08a550b69c41b30c908eb5bf0906a67eee79a21ccd5fc1dcd
5
5
  SHA512:
6
- metadata.gz: bd2e2d802c35ace23dc60f202b8314974936b77a0b00c94a2013303b9dfd13519a0d673ee4fb2ef322e1d8d97f751db6d355ea9cf6e789219059c3028085cbe3
7
- data.tar.gz: a4291b924ae9f280b2beaee9fd7cb2ed1c711cd64a1e6c11061a5b26477de5b9913c7abc9d2baaa88d6e402d0f585aec7b8bad888eaa19c16af7697cc3a57015
6
+ metadata.gz: e13576f10e90eb2d277302bfcfe7cecb7feb681d25070052c50b6060b95e0b455061d093d8ddde84a69c650e2fa6f2b3775e25913cf743023c2ee036bdef0764
7
+ data.tar.gz: 5714fefdd57b9683974ea42f6d111ac87b66f723221f5f0852c95b758d92cf19f6eac32c9ddd2e98e1f77dcbac4db70c735eddf4999cb39be71ad2717efb5d5d
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ set -eu
4
+ export LC_ALL=C
5
+ ROOT=$(dirname "${BASH_SOURCE}")
6
+
7
+ kustomize build ${ROOT}/storage-version-migrator | sed -e "s/NAMESPACE/kube-system/g" > ${ROOT}/../lib/porkadot/assets/kubernetes/manifests/storage-version-migrator.yaml.erb
@@ -0,0 +1,77 @@
1
+ namespace: kube-system
2
+
3
+ resources:
4
+ - https://github.com/kubernetes-sigs/kube-storage-version-migrator/manifests/?ref=acdee30ced218b79e39c6a701985e8cd8bd33824
5
+
6
+ images:
7
+ - name: REGISTRY/storage-version-migration-initializer:VERSION
8
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-initializer
9
+ newTag: v0.0.3
10
+ - name: REGISTRY/storage-version-migration-migrator:VERSION
11
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-migrator
12
+ newTag: v0.0.3
13
+ - name: REGISTRY/storage-version-migration-trigger:VERSION
14
+ newName: asia.gcr.io/k8s-artifacts-prod/storage-migrator/storage-version-migration-trigger
15
+ newTag: v0.0.3
16
+ patchesJson6902:
17
+ - target:
18
+ group: apps
19
+ version: v1
20
+ kind: Deployment
21
+ name: migrator
22
+ namespace: kube-system
23
+ patch: |-
24
+ - op: remove
25
+ path: /spec/template/spec/containers/0/livenessProbe
26
+ - op: add
27
+ path: /spec/template/spec/containers/0/command/-
28
+ value: --kubeconfig=/etc/migrator/kubeconfig
29
+ - target:
30
+ group: apps
31
+ version: v1
32
+ kind: Deployment
33
+ name: trigger
34
+ namespace: kube-system
35
+ patch: |-
36
+ - op: remove
37
+ path: /spec/template/spec/containers/0/livenessProbe
38
+ - op: add
39
+ path: /spec/template/spec/containers/0/args
40
+ value: ["--kubeconfig=/etc/migrator/kubeconfig"]
41
+ patchesStrategicMerge:
42
+ - |-
43
+ apiVersion: apps/v1
44
+ kind: Deployment
45
+ metadata:
46
+ name: migrator
47
+ namespace: NAMESPACE
48
+ spec:
49
+ template:
50
+ spec:
51
+ containers:
52
+ - name: migrator
53
+ volumeMounts:
54
+ - mountPath: /etc/migrator
55
+ name: kubeconfig
56
+ volumes:
57
+ - name: kubeconfig
58
+ configMap:
59
+ name: kubeconfig-in-cluster-latest
60
+ - |-
61
+ apiVersion: apps/v1
62
+ kind: Deployment
63
+ metadata:
64
+ name: trigger
65
+ namespace: NAMESPACE
66
+ spec:
67
+ template:
68
+ spec:
69
+ containers:
70
+ - name: trigger
71
+ volumeMounts:
72
+ - mountPath: /etc/migrator
73
+ name: kubeconfig
74
+ volumes:
75
+ - name: kubeconfig
76
+ configMap:
77
+ name: kubeconfig-in-cluster-latest
@@ -4,6 +4,15 @@ module Porkadot::Assets
4
4
  space = space.times.map{' '}.join('')
5
5
  text.lines.map{|line| "#{space}#{line}"}.join('')
6
6
  end
7
+
8
+ def to_yaml(obj, space=0)
9
+ h = Hashie::Mash.new({obj: obj})
10
+ h = h.to_hash
11
+ if h['obj'].size == 0
12
+ return ''
13
+ end
14
+ return self.indent(h['obj'].to_yaml(canonical: false, header: false).gsub(/---\n/, ''), space)
15
+ end
7
16
  end
8
17
 
9
18
  def render_erb file, opts={}
@@ -20,35 +20,9 @@ spec:
20
20
  image: <%= k8s.image_repository %>/kube-apiserver:<%= k8s.kubernetes_version %>
21
21
  command:
22
22
  - kube-apiserver
23
- - --advertise-address=$(POD_IP)
24
- - --allow-privileged
25
- - --authorization-mode=Node,RBAC
26
- - --bind-address=0.0.0.0
27
- - --client-ca-file=/etc/kubernetes/secrets/kubernetes/ca.crt
28
- - --enable-admission-plugins=NodeRestriction
29
- - --enable-bootstrap-token-auth=true
30
- - --etcd-cafile=/etc/kubernetes/secrets/etcd/ca.crt
31
- - --etcd-certfile=/etc/kubernetes/secrets/etcd/etcd-client.crt
32
- - --etcd-keyfile=/etc/kubernetes/secrets/etcd/etcd-client.key
33
- - --etcd-servers=<%= global_config.etcd.advertise_client_urls.join(',') %>
34
- - --kubelet-certificate-authority=/etc/kubernetes/secrets/kubernetes/ca.crt
35
- - --kubelet-client-certificate=/etc/kubernetes/secrets/kubernetes/kubelet-client.crt
36
- - --kubelet-client-key=/etc/kubernetes/secrets/kubernetes/kubelet-client.key
37
- - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
38
- - --proxy-client-cert-file=/etc/kubernetes/secrets/kubernetes/front-proxy-client.crt
39
- - --proxy-client-key-file=/etc/kubernetes/secrets/kubernetes/front-proxy-client.key
40
- - --requestheader-allowed-names=front-proxy-client
41
- - --requestheader-client-ca-file=/etc/kubernetes/secrets/kubernetes/front-proxy-ca.crt
42
- - --requestheader-extra-headers-prefix=X-Remote-Extra-
43
- - --requestheader-group-headers=X-Remote-Group
44
- - --requestheader-username-headers=X-Remote-User
45
- - --secure-port=<%= k8s.apiserver.bind_port %>
46
- - --service-account-key-file=/etc/kubernetes/secrets/kubernetes/sa.pub
47
- - --service-cluster-ip-range=<%= k8s.networking.service_subnet %>
48
- - --storage-backend=etcd3
49
- - --tls-cert-file=/etc/kubernetes/secrets/kubernetes/apiserver.crt
50
- - --tls-private-key-file=/etc/kubernetes/secrets/kubernetes/apiserver.key
51
- - --v=2
23
+ <%- k8s.apiserver.args(bootstrap: true).each do |k, v| -%>
24
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
25
+ <%- end -%>
52
26
  env:
53
27
  - name: POD_IP
54
28
  valueFrom:
@@ -64,7 +38,7 @@ spec:
64
38
  - mountPath: /usr/share/ca-certificates
65
39
  name: usr-share-ca-certificates
66
40
  readOnly: true
67
- - mountPath: /etc/kubernetes/secrets
41
+ - mountPath: /etc/kubernetes/pki
68
42
  name: secrets
69
43
  readOnly: true
70
44
  - mountPath: /var/lock
@@ -15,23 +15,17 @@ spec:
15
15
  image: <%= k8s.image_repository %>/kube-controller-manager:<%= k8s.kubernetes_version %>
16
16
  command:
17
17
  - kube-controller-manager
18
- - --allocate-node-cidrs=true
19
- - --cluster-cidr=<%= k8s.networking.pod_subnet %>
20
- - --cluster-signing-cert-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.crt
21
- - --cluster-signing-key-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.key
22
- - --controllers=*,bootstrapsigner,tokencleaner
23
- - --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
24
- - --leader-elect=true
25
- - --node-cidr-mask-size=24
26
- - --root-ca-file=/etc/kubernetes/bootstrap/secrets/kubernetes/ca.crt
27
- - --service-account-private-key-file=/etc/kubernetes/bootstrap/secrets/kubernetes/sa.key
28
- - --use-service-account-credentials=true
29
- - --v=2
18
+ <%- k8s.controller_manager.args(bootstrap: true).each do |k, v| -%>
19
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
20
+ <%- end -%>
30
21
  volumeMounts:
31
22
  - name: var-run-kubernetes
32
23
  mountPath: /var/run/kubernetes
33
- - name: kubernetes
34
- mountPath: /etc/kubernetes
24
+ - name: kubernetes-secrets
25
+ mountPath: /etc/kubernetes/pki
26
+ readOnly: true
27
+ - name: kubernetes-bootstrap
28
+ mountPath: /etc/kubernetes/bootstrap
35
29
  readOnly: true
36
30
  - mountPath: /usr/libexec/kubernetes/kubelet-plugins/volume/exec
37
31
  name: flexvolume-dir
@@ -48,9 +42,12 @@ spec:
48
42
  volumes:
49
43
  - name: var-run-kubernetes
50
44
  emptyDir: {}
51
- - name: kubernetes
45
+ - name: kubernetes-secrets
46
+ hostPath:
47
+ path: /etc/kubernetes/bootstrap/secrets
48
+ - name: kubernetes-bootstrap
52
49
  hostPath:
53
- path: /etc/kubernetes
50
+ path: /etc/kubernetes/bootstrap
54
51
  - hostPath:
55
52
  path: /etc/ssl/certs
56
53
  type: DirectoryOrCreate
@@ -18,8 +18,9 @@ spec:
18
18
  imagePullPolicy: IfNotPresent
19
19
  command:
20
20
  - kube-proxy
21
- - --config=/etc/kubernetes/bootstrap/kube-proxy-bootstrap.yaml
22
- - --hostname-override=$(NODE_NAME)
21
+ <%- k8s.proxy.args(bootstrap: true).each do |k, v| -%>
22
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
23
+ <%- end -%>
23
24
  env:
24
25
  - name: NODE_NAME
25
26
  valueFrom:
@@ -15,11 +15,9 @@ spec:
15
15
  image: <%= k8s.image_repository %>/kube-scheduler:<%= k8s.kubernetes_version %>
16
16
  command:
17
17
  - kube-scheduler
18
- - --kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
19
- - --authentication-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
20
- - --authorization-kubeconfig=/etc/kubernetes/bootstrap/kubeconfig-bootstrap.yaml
21
- - --leader-elect=true
22
- - --v=2
18
+ <%- k8s.scheduler.args(bootstrap: true).each do |k, v| -%>
19
+ - <%= k %><% if v ;%>=<%= v %><%; end %>
20
+ <%- end -%>
23
21
  volumeMounts:
24
22
  - name: kubernetes
25
23
  mountPath: /etc/kubernetes
@@ -30,6 +30,8 @@ spec:
30
30
  - --data-dir=/var/lib/etcd
31
31
  - --heartbeat-interval=1000
32
32
  - --election-timeout=10000
33
+ env:
34
+ <%= u.to_yaml(etcd.extra_env, 4) -%>
33
35
  volumeMounts:
34
36
  - mountPath: /var/lib/etcd
35
37
  name: etcd
@@ -64,6 +64,7 @@ module Porkadot; module Assets
64
64
  render_erb 'install.sh'
65
65
  render_erb 'install-deps.sh'
66
66
  render_erb 'install-pkgs.sh'
67
+ render_erb 'setup-containerd.sh'
67
68
  end
68
69
 
69
70
  def render_bootstrap_certs
@@ -12,6 +12,7 @@ authorization:
12
12
  webhook:
13
13
  cacheAuthorizedTTL: 0s
14
14
  cacheUnauthorizedTTL: 0s
15
+ cgroupDriver: systemd
15
16
  clusterDNS:
16
17
  - <%= global_config.k8s.networking.dns_ip %>
17
18
  clusterDomain: <%= global_config.k8s.networking.dns_domain %>
@@ -32,5 +33,7 @@ streamingConnectionIdleTimeout: 0s
32
33
  syncFrequency: 0s
33
34
  volumeStatsAggPeriod: 0s
34
35
  serverTLSBootstrap: true
36
+ featureGates:
37
+ CSIMigration: false
35
38
 
36
39
  # vim:filetype=yaml
@@ -26,3 +26,14 @@ curl -L https://storage.googleapis.com/kubernetes-release/release/${RELEASE}/bin
26
26
  chmod +x /opt/bin/kubelet-${RELEASE}
27
27
  rm -f /opt/bin/kubelet
28
28
  ln -s /opt/bin/kubelet-${RELEASE} /opt/bin/kubelet
29
+
30
+ ETCD_VER="<%= global_config.etcd.image_tag.gsub(/\-\w+$/, '') %>"
31
+ ETCD_URL=https://storage.googleapis.com/etcd/${ETCD_VER}/etcd-${ETCD_VER}-linux-${architecture}.tar.gz
32
+ ETCD_TMP=$(mktemp -d)
33
+
34
+ curl -L ${ETCD_URL} -o ${ETCD_TMP}/etcd.tar.gz
35
+ tar zxvf ${ETCD_TMP}/etcd.tar.gz -C ${ETCD_TMP}/ --strip-components=1
36
+ chmod +x ${ETCD_TMP}/etcdctl
37
+ rm -f /opt/bin/etcdctl
38
+ mv ${ETCD_TMP}/etcdctl /opt/bin/etcdctl-${ETCD_VER}
39
+ ln -s /opt/bin/etcdctl-${ETCD_VER} /opt/bin/etcdctl
@@ -4,6 +4,7 @@ export LC_ALL=C
4
4
  ROOT=$(dirname "${BASH_SOURCE}")
5
5
 
6
6
  if type apt-get > /dev/null 2>&1 ;then
7
+ export DEBIAN_FRONTEND=noninteractive
7
8
  apt-get update
8
9
  apt-get install -y \
9
10
  ca-certificates \
@@ -22,12 +23,28 @@ if type apt-get > /dev/null 2>&1 ;then
22
23
  nfs-common \
23
24
  socat \
24
25
  udev \
25
- util-linux
26
+ util-linux \
27
+ open-iscsi
26
28
  fi
27
29
 
30
+ cat > /etc/modules-load.d/porkadot.conf <<EOF
31
+ overlay
32
+ br_netfilter
33
+ EOF
34
+
35
+ modprobe overlay
36
+ modprobe br_netfilter
37
+
28
38
  cat <<EOF > /etc/sysctl.d/k8s.conf
29
39
  net.bridge.bridge-nf-call-ip6tables = 1
30
- net.bridge.bridge-nf-call-iptables = 1
40
+ net.ipv4.ip_forward = 1
41
+ net.bridge.bridge-nf-call-iptables = 1
31
42
  EOF
32
43
 
44
+ cat <<EOF > /etc/iscsi/initiatorname.iscsi
45
+ InitiatorName=iqn.2020-04.cloud.unstable:<%= config.hostname %>
46
+ EOF
47
+
48
+ systemctl restart iscsid.service
49
+
33
50
  sysctl --system
@@ -5,11 +5,13 @@ Documentation=http://kubernetes.io/docs/
5
5
  [Service]
6
6
  EnvironmentFile=-/etc/default/kubelet
7
7
  ExecStart=/opt/bin/kubelet \
8
+ --container-runtime=remote \
9
+ --container-runtime-endpoint=/run/containerd/containerd.sock \
8
10
  --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \
9
11
  --kubeconfig=/etc/kubernetes/kubelet.conf \
10
12
  --config=/var/lib/kubelet/config.yaml \
11
13
  --network-plugin=cni \
12
- --pod-infra-container-image=k8s.gcr.io/pause:3.1 \
14
+ --pod-infra-container-image=k8s.gcr.io/pause:3.4.1 \
13
15
  --hostname-override=<%= config.hostname %> \
14
16
  --node-labels=<%= config.labels_string %> \
15
17
  --register-with-taints=<%= config.taints_string %> \
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -eu
3
+ export LC_ALL=C
4
+ ROOT=$(dirname "${BASH_SOURCE}")
5
+
6
+ mkdir -p /etc/containerd
7
+ containerd config default | tee /etc/containerd/config.toml
8
+ sed -i -e "/containerd.runtimes.runc.options/a SystemdCgroup = true" /etc/containerd/config.toml
9
+
10
+ systemctl restart containerd
@@ -28,15 +28,18 @@ module Porkadot; module Assets
28
28
  render_erb 'manifests/porkadot.yaml'
29
29
  render_erb 'manifests/kubelet.yaml'
30
30
  render_erb "manifests/#{lb.type}.yaml"
31
+ render_secrets_erb "manifests/#{lb.type}.secrets.yaml"
31
32
  render_erb "manifests/#{cni.type}.yaml"
33
+ render_erb "manifests/coredns.yaml"
34
+ render_erb "manifests/dns-horizontal-autoscaler.yaml"
32
35
  render_erb "manifests/kube-apiserver.yaml"
33
36
  render_secrets_erb "manifests/kube-apiserver.secrets.yaml"
34
37
  render_erb "manifests/kube-proxy.yaml"
35
38
  render_erb "manifests/kube-scheduler.yaml"
36
39
  render_erb "manifests/kube-controller-manager.yaml"
37
40
  render_secrets_erb "manifests/kube-controller-manager.secrets.yaml"
38
- render_erb "manifests/pod-checkpointer.yaml"
39
41
  render_erb "manifests/kubelet-rubber-stamp.yaml"
42
+ render_erb "manifests/storage-version-migrator.yaml"
40
43
  render_erb 'install.sh'
41
44
  end
42
45
 
@@ -0,0 +1,209 @@
1
+ <% k8s = global_config.k8s -%>
2
+ # __MACHINE_GENERATED_WARNING__
3
+
4
+ apiVersion: v1
5
+ kind: ServiceAccount
6
+ metadata:
7
+ name: coredns
8
+ namespace: kube-system
9
+ labels:
10
+ kubernetes.io/cluster-service: "true"
11
+ addonmanager.kubernetes.io/mode: Reconcile
12
+ ---
13
+ apiVersion: rbac.authorization.k8s.io/v1
14
+ kind: ClusterRole
15
+ metadata:
16
+ labels:
17
+ kubernetes.io/bootstrapping: rbac-defaults
18
+ addonmanager.kubernetes.io/mode: Reconcile
19
+ name: system:coredns
20
+ rules:
21
+ - apiGroups:
22
+ - ""
23
+ resources:
24
+ - endpoints
25
+ - services
26
+ - pods
27
+ - namespaces
28
+ verbs:
29
+ - list
30
+ - watch
31
+ - apiGroups:
32
+ - ""
33
+ resources:
34
+ - nodes
35
+ verbs:
36
+ - get
37
+ - apiGroups:
38
+ - discovery.k8s.io
39
+ resources:
40
+ - endpointslices
41
+ verbs:
42
+ - list
43
+ - watch
44
+ ---
45
+ apiVersion: rbac.authorization.k8s.io/v1
46
+ kind: ClusterRoleBinding
47
+ metadata:
48
+ annotations:
49
+ rbac.authorization.kubernetes.io/autoupdate: "true"
50
+ labels:
51
+ kubernetes.io/bootstrapping: rbac-defaults
52
+ addonmanager.kubernetes.io/mode: EnsureExists
53
+ name: system:coredns
54
+ roleRef:
55
+ apiGroup: rbac.authorization.k8s.io
56
+ kind: ClusterRole
57
+ name: system:coredns
58
+ subjects:
59
+ - kind: ServiceAccount
60
+ name: coredns
61
+ namespace: kube-system
62
+ ---
63
+ apiVersion: v1
64
+ kind: ConfigMap
65
+ metadata:
66
+ name: coredns
67
+ namespace: kube-system
68
+ labels:
69
+ addonmanager.kubernetes.io/mode: EnsureExists
70
+ data:
71
+ Corefile: |
72
+ .:53 {
73
+ errors
74
+ health {
75
+ lameduck 5s
76
+ }
77
+ ready
78
+ kubernetes <%= k8s.networking.dns_domain %> in-addr.arpa ip6.arpa {
79
+ pods insecure
80
+ fallthrough in-addr.arpa ip6.arpa
81
+ ttl 30
82
+ }
83
+ prometheus :9153
84
+ forward . /etc/resolv.conf
85
+ cache 30
86
+ loop
87
+ reload
88
+ loadbalance
89
+ }
90
+ ---
91
+ apiVersion: apps/v1
92
+ kind: Deployment
93
+ metadata:
94
+ name: coredns
95
+ namespace: kube-system
96
+ labels:
97
+ k8s-app: kube-dns
98
+ kubernetes.io/cluster-service: "true"
99
+ addonmanager.kubernetes.io/mode: Reconcile
100
+ kubernetes.io/name: "CoreDNS"
101
+ spec:
102
+ # replicas: not specified here:
103
+ # 1. In order to make Addon Manager do not reconcile this replicas parameter.
104
+ # 2. Default is 1.
105
+ # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.
106
+ strategy:
107
+ type: RollingUpdate
108
+ rollingUpdate:
109
+ maxUnavailable: 1
110
+ selector:
111
+ matchLabels:
112
+ k8s-app: kube-dns
113
+ template:
114
+ metadata:
115
+ labels:
116
+ k8s-app: kube-dns
117
+ annotations:
118
+ seccomp.security.alpha.kubernetes.io/pod: 'runtime/default'
119
+ spec:
120
+ priorityClassName: system-cluster-critical
121
+ serviceAccountName: coredns
122
+ tolerations:
123
+ - key: "CriticalAddonsOnly"
124
+ operator: "Exists"
125
+ nodeSelector:
126
+ kubernetes.io/os: linux
127
+ containers:
128
+ - name: coredns
129
+ image: k8s.gcr.io/coredns/coredns:v1.8.3
130
+ imagePullPolicy: IfNotPresent
131
+ resources:
132
+ limits:
133
+ memory: 170Mi
134
+ requests:
135
+ cpu: 100m
136
+ memory: 70Mi
137
+ args: [ "-conf", "/etc/coredns/Corefile" ]
138
+ volumeMounts:
139
+ - name: config-volume
140
+ mountPath: /etc/coredns
141
+ readOnly: true
142
+ ports:
143
+ - containerPort: 53
144
+ name: dns
145
+ protocol: UDP
146
+ - containerPort: 53
147
+ name: dns-tcp
148
+ protocol: TCP
149
+ - containerPort: 9153
150
+ name: metrics
151
+ protocol: TCP
152
+ livenessProbe:
153
+ httpGet:
154
+ path: /health
155
+ port: 8080
156
+ scheme: HTTP
157
+ initialDelaySeconds: 60
158
+ timeoutSeconds: 5
159
+ successThreshold: 1
160
+ failureThreshold: 5
161
+ readinessProbe:
162
+ httpGet:
163
+ path: /ready
164
+ port: 8181
165
+ scheme: HTTP
166
+ securityContext:
167
+ allowPrivilegeEscalation: false
168
+ capabilities:
169
+ add:
170
+ - NET_BIND_SERVICE
171
+ drop:
172
+ - all
173
+ readOnlyRootFilesystem: true
174
+ dnsPolicy: Default
175
+ volumes:
176
+ - name: config-volume
177
+ configMap:
178
+ name: coredns
179
+ items:
180
+ - key: Corefile
181
+ path: Corefile
182
+ ---
183
+ apiVersion: v1
184
+ kind: Service
185
+ metadata:
186
+ name: kube-dns
187
+ namespace: kube-system
188
+ annotations:
189
+ prometheus.io/port: "9153"
190
+ prometheus.io/scrape: "true"
191
+ labels:
192
+ k8s-app: kube-dns
193
+ kubernetes.io/cluster-service: "true"
194
+ addonmanager.kubernetes.io/mode: Reconcile
195
+ kubernetes.io/name: "CoreDNS"
196
+ spec:
197
+ selector:
198
+ k8s-app: kube-dns
199
+ clusterIP: <%= k8s.networking.dns_ip %>
200
+ ports:
201
+ - name: dns
202
+ port: 53
203
+ protocol: UDP
204
+ - name: dns-tcp
205
+ port: 53
206
+ protocol: TCP
207
+ - name: metrics
208
+ port: 9153
209
+ protocol: TCP