You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
308 lines
7.2 KiB
308 lines
7.2 KiB
step="core-dns-service" |
|
printf "Starting to run ${step}\n" |
|
|
|
. /etc/sysconfig/heat-params |
|
|
|
_dns_prefix=${CONTAINER_INFRA_PREFIX:-docker.io/coredns/} |
|
_autoscaler_prefix=${CONTAINER_INFRA_PREFIX:-gcr.io/google_containers/} |
|
|
|
CORE_DNS=/srv/magnum/kubernetes/manifests/kube-coredns.yaml |
|
[ -f ${CORE_DNS} ] || { |
|
echo "Writing File: $CORE_DNS" |
|
mkdir -p $(dirname ${CORE_DNS}) |
|
cat << EOF > ${CORE_DNS} |
|
apiVersion: v1 |
|
kind: ServiceAccount |
|
metadata: |
|
name: coredns |
|
namespace: kube-system |
|
--- |
|
apiVersion: rbac.authorization.k8s.io/v1 |
|
kind: ClusterRole |
|
metadata: |
|
labels: |
|
kubernetes.io/bootstrapping: rbac-defaults |
|
name: system:coredns |
|
rules: |
|
- apiGroups: |
|
- "" |
|
resources: |
|
- endpoints |
|
- services |
|
- pods |
|
- namespaces |
|
verbs: |
|
- list |
|
- watch |
|
- apiGroups: |
|
- "" |
|
resources: |
|
- nodes |
|
verbs: |
|
- get |
|
--- |
|
apiVersion: rbac.authorization.k8s.io/v1 |
|
kind: ClusterRoleBinding |
|
metadata: |
|
annotations: |
|
rbac.authorization.kubernetes.io/autoupdate: "true" |
|
labels: |
|
kubernetes.io/bootstrapping: rbac-defaults |
|
name: system:coredns |
|
roleRef: |
|
apiGroup: rbac.authorization.k8s.io |
|
kind: ClusterRole |
|
name: system:coredns |
|
subjects: |
|
- kind: ServiceAccount |
|
name: coredns |
|
namespace: kube-system |
|
--- |
|
apiVersion: v1 |
|
kind: ConfigMap |
|
metadata: |
|
name: coredns |
|
namespace: kube-system |
|
data: |
|
Corefile: | |
|
.:53 { |
|
errors |
|
log stdout |
|
health |
|
kubernetes ${DNS_CLUSTER_DOMAIN} ${PORTAL_NETWORK_CIDR} ${PODS_NETWORK_CIDR} { |
|
pods verified |
|
upstream |
|
fallthrough in-addr.arpa ip6.arpa |
|
} |
|
prometheus :9153 |
|
forward . /etc/resolv.conf |
|
cache 30 |
|
loop |
|
reload |
|
loadbalance |
|
} |
|
|
|
--- |
|
apiVersion: apps/v1 |
|
kind: Deployment |
|
metadata: |
|
name: coredns |
|
namespace: kube-system |
|
labels: |
|
k8s-app: kube-dns |
|
kubernetes.io/name: "CoreDNS" |
|
spec: |
|
replicas: 2 |
|
strategy: |
|
type: RollingUpdate |
|
rollingUpdate: |
|
maxUnavailable: 1 |
|
selector: |
|
matchLabels: |
|
k8s-app: kube-dns |
|
template: |
|
metadata: |
|
labels: |
|
k8s-app: kube-dns |
|
spec: |
|
priorityClassName: system-cluster-critical |
|
serviceAccountName: coredns |
|
tolerations: |
|
# Make sure the pod can be scheduled on master kubelet. |
|
- effect: NoSchedule |
|
operator: Exists |
|
# Mark the pod as a critical add-on for rescheduling. |
|
- key: CriticalAddonsOnly |
|
operator: Exists |
|
- effect: NoExecute |
|
operator: Exists |
|
nodeSelector: |
|
beta.kubernetes.io/os: linux |
|
containers: |
|
- name: coredns |
|
image: ${_dns_prefix}coredns:${COREDNS_TAG} |
|
imagePullPolicy: IfNotPresent |
|
resources: |
|
limits: |
|
memory: 170Mi |
|
requests: |
|
cpu: 100m |
|
memory: 70Mi |
|
args: [ "-conf", "/etc/coredns/Corefile" ] |
|
volumeMounts: |
|
- name: config-volume |
|
mountPath: /etc/coredns |
|
readOnly: true |
|
- name: tmp |
|
mountPath: /tmp |
|
ports: |
|
- containerPort: 53 |
|
name: dns |
|
protocol: UDP |
|
- containerPort: 53 |
|
name: dns-tcp |
|
protocol: TCP |
|
- containerPort: 9153 |
|
name: metrics |
|
protocol: TCP |
|
securityContext: |
|
allowPrivilegeEscalation: false |
|
capabilities: |
|
add: |
|
- NET_BIND_SERVICE |
|
drop: |
|
- all |
|
readOnlyRootFilesystem: true |
|
livenessProbe: |
|
httpGet: |
|
path: /health |
|
port: 8080 |
|
scheme: HTTP |
|
initialDelaySeconds: 60 |
|
timeoutSeconds: 5 |
|
successThreshold: 1 |
|
failureThreshold: 5 |
|
readinessProbe: |
|
httpGet: |
|
path: /health |
|
port: 8080 |
|
scheme: HTTP |
|
dnsPolicy: Default |
|
volumes: |
|
- name: tmp |
|
emptyDir: {} |
|
- name: config-volume |
|
configMap: |
|
name: coredns |
|
items: |
|
- key: Corefile |
|
path: Corefile |
|
--- |
|
apiVersion: v1 |
|
kind: Service |
|
metadata: |
|
name: kube-dns |
|
namespace: kube-system |
|
annotations: |
|
prometheus.io/port: "9153" |
|
prometheus.io/scrape: "true" |
|
labels: |
|
k8s-app: kube-dns |
|
kubernetes.io/cluster-service: "true" |
|
kubernetes.io/name: "CoreDNS" |
|
spec: |
|
selector: |
|
k8s-app: kube-dns |
|
clusterIP: ${DNS_SERVICE_IP} |
|
ports: |
|
- name: dns |
|
port: 53 |
|
protocol: UDP |
|
- name: dns-tcp |
|
port: 53 |
|
protocol: TCP |
|
- name: metrics |
|
port: 9153 |
|
protocol: TCP |
|
--- |
|
kind: ServiceAccount |
|
apiVersion: v1 |
|
metadata: |
|
name: kube-dns-autoscaler |
|
namespace: kube-system |
|
labels: |
|
addonmanager.kubernetes.io/mode: Reconcile |
|
--- |
|
kind: ClusterRole |
|
apiVersion: rbac.authorization.k8s.io/v1 |
|
metadata: |
|
name: system:kube-dns-autoscaler |
|
labels: |
|
addonmanager.kubernetes.io/mode: Reconcile |
|
rules: |
|
- apiGroups: [""] |
|
resources: ["nodes"] |
|
verbs: ["list"] |
|
- apiGroups: [""] |
|
resources: ["replicationcontrollers/scale"] |
|
verbs: ["get", "update"] |
|
- apiGroups: ["extensions"] |
|
resources: ["deployments/scale", "replicasets/scale"] |
|
verbs: ["get", "update"] |
|
# Remove the configmaps rule once below issue is fixed: |
|
# kubernetes-incubator/cluster-proportional-autoscaler#16 |
|
- apiGroups: [""] |
|
resources: ["configmaps"] |
|
verbs: ["get", "create"] |
|
--- |
|
kind: ClusterRoleBinding |
|
apiVersion: rbac.authorization.k8s.io/v1 |
|
metadata: |
|
name: system:kube-dns-autoscaler |
|
labels: |
|
addonmanager.kubernetes.io/mode: Reconcile |
|
subjects: |
|
- kind: ServiceAccount |
|
name: kube-dns-autoscaler |
|
namespace: kube-system |
|
roleRef: |
|
kind: ClusterRole |
|
name: system:kube-dns-autoscaler |
|
apiGroup: rbac.authorization.k8s.io |
|
|
|
--- |
|
apiVersion: apps/v1 |
|
kind: Deployment |
|
metadata: |
|
name: kube-dns-autoscaler |
|
namespace: kube-system |
|
labels: |
|
k8s-app: kube-dns-autoscaler |
|
kubernetes.io/cluster-service: "true" |
|
addonmanager.kubernetes.io/mode: Reconcile |
|
spec: |
|
selector: |
|
matchLabels: |
|
k8s-app: kube-dns-autoscaler |
|
template: |
|
metadata: |
|
labels: |
|
k8s-app: kube-dns-autoscaler |
|
annotations: |
|
scheduler.alpha.kubernetes.io/critical-pod: '' |
|
spec: |
|
priorityClassName: system-cluster-critical |
|
containers: |
|
- name: autoscaler |
|
image: ${_autoscaler_prefix}cluster-proportional-autoscaler-${ARCH}:1.1.2 |
|
resources: |
|
requests: |
|
cpu: "20m" |
|
memory: "10Mi" |
|
command: |
|
- /cluster-proportional-autoscaler |
|
- --namespace=kube-system |
|
- --configmap=kube-dns-autoscaler |
|
# Should keep target in sync with above coredns deployment name |
|
- --target=Deployment/coredns |
|
# When cluster is using large nodes(with more cores), "coresPerReplica" should dominate. |
|
# If using small nodes, "nodesPerReplica" should dominate. |
|
- --default-params={"linear":{"coresPerReplica":256,"nodesPerReplica":16,"preventSinglePointFailure":true}} |
|
- --logtostderr=true |
|
- --v=2 |
|
tolerations: |
|
- key: "CriticalAddonsOnly" |
|
operator: "Exists" |
|
serviceAccountName: kube-dns-autoscaler |
|
EOF |
|
} |
|
|
|
echo "Waiting for Kubernetes API..." |
|
until [ "ok" = "$(curl --silent http://127.0.0.1:8080/healthz)" ] |
|
do |
|
sleep 5 |
|
done |
|
|
|
kubectl apply --validate=false -f $CORE_DNS |
|
|
|
printf "Finished running ${step}\n"
|
|
|