How do I replace the cluster domain with minimal downtime?
| Как поменять домен кластера с минимальным простоем?
|
Add a new domain and retain the previous one. To do this, modify the configuration parameters:
| Добавьте новый домен и сохраните предыдущий. Для этого измените конфигурацию параметров:
|
- In the controlPlaneManager.apiserver:
|
- В controlPlaneManager.apiserver:
|
|
|
Example:
| Пример:
|
yaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: control-plane-manager
spec:
enabled: true
version: 1
settings:
apiserver:
certSANs:
- kubernetes.default.svc.
- kubernetes.default.svc.
serviceAccount:
additionalAPIAudiences:
- https://kubernetes.default.svc.
- https://kubernetes.default.svc.
additionalAPIIssuers:
- https://kubernetes.default.svc.
- https://kubernetes.default.svc.
| yaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: control-plane-manager
spec:
version: 1
enabled: true
settings:
apiserver:
certSANs:
- kubernetes.default.svc.<старый clusterDomain="">старый>
- kubernetes.default.svc.<новый clusterDomain="">
serviceAccount:
additionalAPIAudiences:новый>
- https://kubernetes.default.svc.<старый clusterDomain="">старый>
- https://kubernetes.default.svc.<новый clusterDomain="">
additionalAPIIssuers:новый>
- https://kubernetes.default.svc.<старый clusterDomain="">старый>
- https://kubernetes.default.svc.<новый clusterDomain="">новый>
|
- In the kubeDns.clusterDomainAliases:
|
- В kubeDns.clusterDomainAliases:
|
Example:
| Пример:
|
yaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: kube-dns
spec:
version: 1
enabled: true
settings:
clusterDomainAliases:
| yaml
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: kube-dns
spec:
version: 1
enabled: true
settings:
clusterDomainAliases:
-
<старый clusterDomain="">
старый>
-
<новый clusterDomain="">
новый>
|
- Wait until the
kube-apiserver has restarted.
- Replace the previous
clusterDomain with the new one. To do this, execute the command:
|
- Дождитесь перезапуска
kube-apiserver .
- Поменяйте
clusterDomain на новый. Для этого выполните команду:
|
bash
kubectl -n d8-system exec -ti svc/deckhouse-leader – deckhouse-controller edit cluster-configuration
| bash
kubectl -n d8-system exec -ti svc/deckhouse-leader – deckhouse-controller edit cluster-configuration
|
Important! If your Kubernetes version is 1.20 and higher, your controllers in the cluster use advanced ServiceAccount tokens to work with API server. Those tokens have extra fields iss: and aud: that contain clusterDomain (e.g. "iss": "https://kubernetes.default.svc.cluster.local" ). After changing the clusterDomain, the API server will start issuing tokens with the new service-account-issuer, but thanks to the configuration of additionalAPIAudiences and additionalAPIIssuers, the apiserver will continue to accept the old tokens.
After 48 minutes (80% of 3607 seconds), Kubernetes will begin to refresh the issued tokens, and the new service-account-issuer will be used for the updated tokens. After 90 minutes (3607 seconds plus a short buffer) following the kube-apiserver restart, you can remove the serviceAccount configuration from the control-plane-manager configuration.
| Важно! Если версия вашего Kubernetes 1.20 и выше, контроллеры для работы с API-server гарантированно используют расширенные токены для ServiceAccount’ов. Это означает, что каждый такой токен содержит дополнительные поля iss: и aud: , которые включают в себя старый clusterDomain (например, "iss": "https://kubernetes.default.svc.cluster.local" ).
При смене clusterDomain API-server начнет выдавать токены с новым service-account-issuer , но благодаря произведенной конфигурации additionalAPIAudiences и additionalAPIIssuers по-прежнему будет принимать старые токены. По истечении 48 минут (80% от 3607 секунд) Kubernetes начнет обновлять выпущенные токены, при обновлении будет использован новый service-account-issuer . Через 90 минут (3607 секунд и немного больше) после перезагрузки kube-apiserver можете удалить конфигурацию serviceAccount из конфигурации control-plane-manager .
|
Important! If you use istio module, you have to restart all the application pods under istio control after changing clusterDomain .
| Важно! Если вы используете модуль istio, после смены clusterDomain обязательно потребуется рестарт всех прикладных подов под управлением Istio.
|