adc apply
Определение
Считывает один или несколько документов (каждый документ может содержать несколько конфигураций объектов, разделенных строкой ---), генерирует объекты Kubernetes для каждой предоставленной конфигурации и применяет их на стороне сервера. Имена созданных ресурсов составляются из конфигурационного параметра metadata.name и опционально передаваемого префикса. Данная команда является идемпотентной.
Сгенерированная конфигурация зависит от параметра kind:
-
Для кластера (
ImpalaCluster,TrinoCluster,SparkApplication,SparkHistoryServer) генерируется CR соответствующего оператора и необходимые секреты. ДляSparkHistoryServerдополнительно генерируется секрет<metadata.name>-spark-history-properties. -
Для оператора (
ImpalaOperator,TrinoOperator,SparkOperator,KerberosOperator) генерируются Namespace, ServiceAccount, RBAC, Deployment, секрет для загрузки образа (если предоставлен) и объекты CRD. -
Для Helm-конфигураций (
Celeborn,YuniKorn) напрямую генерируются объекты workload:-
Celeborn— StatefulSets, Service, ConfigMap, RBAC; -
YuniKorn— k8shim Deployment, ConfigMap, RBAC.
-
Использование
$ adc apply --file <file> [--file <file>...] \
[--kubeconfig <kubeconfig>] \
[--prefix <prefix>] \
[--dry-run] \
[--only-crds | --only-rbac]
| Параметр | Описание |
|---|---|
-f, --file |
Путь к конфигурационному YAML-файлу. Можно предоставить несколько файлов, повторив флаг |
-k, --kubeconfig |
Путь к файлу kubeconfig. Значение по умолчанию — |
-p, --prefix |
Префикс, который будет использован перед |
--dry-run |
Выводит сгенерированный манифест объекта, не применяя его. По умолчанию вывод не содержит конфигурацию объектов CRD |
--only-crds |
Генерирует или применяет только конфигурацию объектов |
--only-rbac |
Генерирует или применяет только конфигурацию объектов |
Примеры
Оператор Trino
Генерация манифеста оператора Trino с перенаправлением вывода в файл trino-operator-render.yaml:
$ adc apply -f trino-operator.yaml --dry-run > trino-operator-render.yaml
Сгенерированный манифест не содержит конфигурацию объектов CRD.
---
apiVersion: v1
kind: Namespace
metadata:
name: trino-operator
spec: {}
status: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: trino-operator
namespace: trino-operator
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: trino-operator-trino-operator-manager
namespace: trino-operator
rules:
- apiGroups:
- events.k8s.io
resources:
- events
verbs:
- create
- patch
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- trino.arenadata.io
resources:
- clusters
verbs:
- get
- list
- watch
- apiGroups:
- trino.arenadata.io
resources:
- clusters/status
verbs:
- get
- patch
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: trino-operator-trino-operator-manager
namespace: trino-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: trino-operator-trino-operator-manager
subjects:
- kind: ServiceAccount
name: trino-operator
namespace: trino-operator
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: trino-operator-trino-operator-payload
namespace: trino-operator
rules:
- apiGroups:
- events.k8s.io
resources:
- events
verbs:
- create
- patch
- apiGroups:
- ""
resources:
- secrets
- services
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- apps
resources:
- deployments
- statefulsets
verbs:
- create
- delete
- get
- list
- patch
- update
- watch
- apiGroups:
- trino.arenadata.io
resources:
- clusters
verbs:
- get
- list
- watch
- apiGroups:
- trino.arenadata.io
resources:
- clusters/status
verbs:
- get
- patch
- update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: trino-operator-trino-operator-payload
namespace: trino-operator
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: trino-operator-trino-operator-payload
subjects:
- kind: ServiceAccount
name: trino-operator
namespace: trino-operator
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: operator
app.kubernetes.io/managed-by: adc-cli
arenadata.io/operator-type: trino
name: trino-operator-trino-operator
namespace: trino-operator
spec:
selector:
matchLabels:
app.kubernetes.io/component: operator
app.kubernetes.io/managed-by: adc-cli
app.kubernetes.io/name: trino-operator-trino-operator
strategy: {}
template:
metadata:
labels:
app.kubernetes.io/component: operator
app.kubernetes.io/managed-by: adc-cli
app.kubernetes.io/name: trino-operator-trino-operator
spec:
containers:
- args:
- -ns=trino-operator
image: hub.adsw.io/ng/trino-operator:1.58.0
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /healthz
port: 8081
initialDelaySeconds: 5
periodSeconds: 10
name: app
readinessProbe:
httpGet:
path: /readyz
port: 8081
initialDelaySeconds: 5
periodSeconds: 10
resources:
limits:
cpu: 500m
memory: 256Mi
requests:
cpu: 500m
memory: 256Mi
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
readOnlyRootFilesystem: true
runAsGroup: 10001
runAsNonRoot: true
runAsUser: 10001
securityContext:
fsGroup: 10001
runAsGroup: 10001
runAsNonRoot: true
runAsUser: 10001
serviceAccountName: trino-operator
terminationGracePeriodSeconds: 10
status: {}
Применение конфигурации оператора Trino:
$ adc apply -f trino-operator.yaml
Кластер Trino
Генерация манифеста кластера Trino с перенаправлением вывода в файл trino-cluster-render.yaml:
$ adc apply -f trino-cluster.yaml --dry-run > trino-cluster-render.yaml
---
apiVersion: v1
kind: Secret
metadata:
name: trino-configs
namespace: trino
stringData:
core-site.xml: |-
<configuration>
<property>
<name>dfs.client.failover.proxy.provider.adh</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ObserverReadProxyProvider</value>
</property>
<property>
<name>dfs.ha.namenodes.adh</name>
<value>nn_tsn-adh-k8s-1,nn_tsn-adh-k8s-3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.adh.nn_tsn-k8s-1</name>
<value>tsn-adh-k8s-1.ru-central1.internal:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.adh.nn_tsn-k8s-3</name>
<value>tsn-adh-k8s-3.ru-central1.internal:8020</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>adh</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://adh</value>
</property>
<property>
<name>hadoop.proxyuser.trino.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.trino.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.security.authentication</name>
<value>simple</value>
</property>
<property>
<name>ozone.om.address.adh.om_tsn-k8s-1</name>
<value>tsn-adh-k8s-1.ru-central1.internal:9862</value>
</property>
<property>
<name>ozone.om.address.adh.om_tsn-k8s-2</name>
<value>tsn-adh-k8s-2.ru-central1.internal:9862</value>
</property>
<property>
<name>ozone.om.address.adh.om_tsn-k8s-3</name>
<value>tsn-adh-k8s-3.ru-central1.internal:9862</value>
</property>
<property>
<name>ozone.om.nodes.adh</name>
<value>om_tsn-adh-k8s-1,om_tsn-adh-k8s-2,om_tsn-adh-k8s-3</value>
</property>
<property>
<name>ozone.om.service.ids</name>
<value>adhom</value>
</property>
</configuration>
type: Opaque
---
apiVersion: trino.arenadata.io/v1alpha1
kind: Cluster
metadata:
name: trino
namespace: trino
spec:
configsSecretName: trino-configs
coordinator:
metadata: {}
replicas: 1
spec:
image: hub.adsw.io/adh-enterprise/trino-docker:476_arenadata2-adh-4.2.0-x86_64
imagePullPolicy: Always
worker:
metadata: {}
replicas: 1
spec:
image: hub.adsw.io/adh-enterprise/trino-docker:476_arenadata2-adh-4.2.0-x86_64
imagePullPolicy: Always
status: {}
Применение конфигурации кластера Trino:
$ adc apply -f trino-cluster.yaml