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.

179 lines
6.6 KiB

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: kube-apiserver
  5. namespace: {{system_namespace}}
  6. labels:
  7. k8s-app: kube-apiserver
  8. kubespray: v2
  9. annotations:
  10. kubespray.etcd-cert/serial: "{{ etcd_client_cert_serial }}"
  11. kubespray.apiserver-cert/serial: "{{ apiserver_cert_serial }}"
  12. spec:
  13. hostNetwork: true
  14. {% if kube_version | version_compare('v1.6', '>=') %}
  15. dnsPolicy: ClusterFirst
  16. {% endif %}
  17. containers:
  18. - name: kube-apiserver
  19. image: {{ hyperkube_image_repo }}:{{ hyperkube_image_tag }}
  20. imagePullPolicy: {{ k8s_image_pull_policy }}
  21. resources:
  22. limits:
  23. cpu: {{ kube_apiserver_cpu_limit }}
  24. memory: {{ kube_apiserver_memory_limit }}
  25. requests:
  26. cpu: {{ kube_apiserver_cpu_requests }}
  27. memory: {{ kube_apiserver_memory_requests }}
  28. command:
  29. - /hyperkube
  30. - apiserver
  31. - --advertise-address={{ ip | default(ansible_default_ipv4.address) }}
  32. - --etcd-servers={{ etcd_access_addresses }}
  33. {% if etcd_events_cluster_setup %}
  34. - --etcd-servers-overrides=/events#{{ etcd_events_access_addresses }}
  35. {% endif %}
  36. {% if kube_version | version_compare('v1.9', '<') %}
  37. - --etcd-quorum-read=true
  38. {% endif %}
  39. - --etcd-cafile={{ etcd_cert_dir }}/ca.pem
  40. - --etcd-certfile={{ etcd_cert_dir }}/node-{{ inventory_hostname }}.pem
  41. - --etcd-keyfile={{ etcd_cert_dir }}/node-{{ inventory_hostname }}-key.pem
  42. - --insecure-bind-address={{ kube_apiserver_insecure_bind_address }}
  43. - --bind-address={{ kube_apiserver_bind_address }}
  44. - --apiserver-count={{ kube_apiserver_count }}
  45. - --admission-control={{ kube_apiserver_admission_control | join(',') }}
  46. - --service-cluster-ip-range={{ kube_service_addresses }}
  47. - --service-node-port-range={{ kube_apiserver_node_port_range }}
  48. - --client-ca-file={{ kube_cert_dir }}/ca.pem
  49. - --profiling=false
  50. - --repair-malformed-updates=false
  51. - --kubelet-client-certificate={{ kube_cert_dir }}/node-{{ inventory_hostname }}.pem
  52. - --kubelet-client-key={{ kube_cert_dir }}/node-{{ inventory_hostname }}-key.pem
  53. - --service-account-lookup=true
  54. {% if kube_basic_auth|default(true) %}
  55. - --basic-auth-file={{ kube_users_dir }}/known_users.csv
  56. {% endif %}
  57. - --tls-cert-file={{ kube_cert_dir }}/apiserver.pem
  58. - --tls-private-key-file={{ kube_cert_dir }}/apiserver-key.pem
  59. - --proxy-client-cert-file={{ kube_cert_dir }}/apiserver.pem
  60. - --proxy-client-key-file={{ kube_cert_dir }}/apiserver-key.pem
  61. {% if kube_token_auth|default(true) %}
  62. - --token-auth-file={{ kube_token_dir }}/known_tokens.csv
  63. {% endif %}
  64. - --service-account-key-file={{ kube_cert_dir }}/apiserver-key.pem
  65. {% if kube_oidc_auth|default(false) and kube_oidc_url is defined and kube_oidc_client_id is defined %}
  66. - --oidc-issuer-url={{ kube_oidc_url }}
  67. - --oidc-client-id={{ kube_oidc_client_id }}
  68. {% if kube_oidc_ca_file is defined %}
  69. - --oidc-ca-file={{ kube_oidc_ca_file }}
  70. {% endif %}
  71. {% if kube_oidc_username_claim is defined %}
  72. - --oidc-username-claim={{ kube_oidc_username_claim }}
  73. {% endif %}
  74. {% if kube_oidc_groups_claim is defined %}
  75. - --oidc-groups-claim={{ kube_oidc_groups_claim }}
  76. {% endif %}
  77. {% endif %}
  78. - --secure-port={{ kube_apiserver_port }}
  79. - --insecure-port={{ kube_apiserver_insecure_port }}
  80. - --storage-backend={{ kube_apiserver_storage_backend }}
  81. {% if kube_api_runtime_config is defined %}
  82. {% for conf in kube_api_runtime_config %}
  83. - --runtime-config={{ conf }}
  84. {% endfor %}
  85. {% endif %}
  86. {% if enable_network_policy %}
  87. {% if kube_version | version_compare('v1.8', '<') %}
  88. - --runtime-config=extensions/v1beta1/networkpolicies=true
  89. {% endif %}
  90. {% endif %}
  91. - --v={{ kube_log_level }}
  92. - --allow-privileged=true
  93. {% if cloud_provider is defined and cloud_provider in ["openstack", "azure", "vsphere"] %}
  94. - --cloud-provider={{ cloud_provider }}
  95. - --cloud-config={{ kube_config_dir }}/cloud_config
  96. {% elif cloud_provider is defined and cloud_provider == "aws" %}
  97. - --cloud-provider={{ cloud_provider }}
  98. {% endif %}
  99. {% if kube_api_anonymous_auth is defined and kube_version | version_compare('v1.5', '>=') %}
  100. - --anonymous-auth={{ kube_api_anonymous_auth }}
  101. {% endif %}
  102. {% if authorization_modes %}
  103. - --authorization-mode={{ authorization_modes|join(',') }}
  104. {% endif %}
  105. {% if kube_feature_gates %}
  106. - --feature-gates={{ kube_feature_gates|join(',') }}
  107. {% endif %}
  108. {% if kube_version | version_compare('v1.9', '>=') %}
  109. - --requestheader-client-ca-file={{ kube_cert_dir }}/ca.pem
  110. - --requestheader-allowed-names=front-proxy-client
  111. - --requestheader-extra-headers-prefix=X-Remote-Extra-
  112. - --requestheader-group-headers=X-Remote-Group
  113. - --requestheader-username-headers=X-Remote-User
  114. - --enable-aggregator-routing={{ kube_api_aggregator_routing }}
  115. - --proxy-client-cert-file={{ kube_cert_dir }}/front-proxy-client.pem
  116. - --proxy-client-key-file={{ kube_cert_dir }}/front-proxy-client-key.pem
  117. {% endif %}
  118. {% if apiserver_custom_flags is string %}
  119. - {{ apiserver_custom_flags }}
  120. {% else %}
  121. {% for flag in apiserver_custom_flags %}
  122. - {{ flag }}
  123. {% endfor %}
  124. {% endif %}
  125. livenessProbe:
  126. httpGet:
  127. host: 127.0.0.1
  128. path: /healthz
  129. {% if kube_apiserver_insecure_port|int == 0 %}
  130. port: {{ kube_apiserver_port }}
  131. scheme: HTTPS
  132. {% else %}
  133. port: {{ kube_apiserver_insecure_port }}
  134. {% endif %}
  135. failureThreshold: 8
  136. initialDelaySeconds: 15
  137. periodSeconds: 10
  138. successThreshold: 1
  139. timeoutSeconds: 15
  140. volumeMounts:
  141. - mountPath: {{ kube_config_dir }}
  142. name: kubernetes-config
  143. readOnly: true
  144. - mountPath: /etc/ssl
  145. name: ssl-certs-host
  146. readOnly: true
  147. {% for dir in ssl_ca_dirs %}
  148. - mountPath: {{ dir }}
  149. name: {{ dir | regex_replace('^/(.*)$', '\\1' ) | regex_replace('/', '-') }}
  150. readOnly: true
  151. {% endfor %}
  152. - mountPath: {{ etcd_cert_dir }}
  153. name: etcd-certs
  154. readOnly: true
  155. {% if cloud_provider is defined and cloud_provider == 'aws' and ansible_os_family == 'RedHat' %}
  156. - mountPath: /etc/ssl/certs/ca-bundle.crt
  157. name: rhel-ca-bundle
  158. readOnly: true
  159. {% endif %}
  160. volumes:
  161. - hostPath:
  162. path: {{ kube_config_dir }}
  163. name: kubernetes-config
  164. - name: ssl-certs-host
  165. hostPath:
  166. path: /etc/ssl
  167. {% for dir in ssl_ca_dirs %}
  168. - name: {{ dir | regex_replace('^/(.*)$', '\\1' ) | regex_replace('/', '-') }}
  169. hostPath:
  170. path: {{ dir }}
  171. {% endfor %}
  172. - hostPath:
  173. path: {{ etcd_cert_dir }}
  174. name: etcd-certs
  175. {% if cloud_provider is defined and cloud_provider == 'aws' and ansible_os_family == 'RedHat' %}
  176. - hostPath:
  177. path: /etc/ssl/certs/ca-bundle.crt
  178. name: rhel-ca-bundle
  179. {% endif %}