Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revisionBoth sides next revision | ||
devops:kubernetes [2021/08/02 13:24] – [Добавление объекта] admin | devops:kubernetes [2022/08/10 14:49] – [Скрипт] admin | ||
---|---|---|---|
Line 352: | Line 352: | ||
set -e | set -e | ||
- | KUB_CONTEXT=' | + | KUB_CONTEXT=' |
- | KUB_USERNAME=' | + | KUB_USERNAME=' |
- | KUB_USERGROUP=' | + | KUB_USERGROUP=' |
#cluster or ns (namespace) | #cluster or ns (namespace) | ||
# | # | ||
AUTH_SCOPE=' | AUTH_SCOPE=' | ||
# If AUTH_SCOPE = ns then we need namespace name | # If AUTH_SCOPE = ns then we need namespace name | ||
- | KUB_NAMESPACE=' | + | KUB_NAMESPACE=' |
- | KUB_ROLE_NAME='app-dev-full' | + | KUB_ROLE_NAME=" |
# Comma separated quoted - '" | # Comma separated quoted - '" | ||
KUB_ROLE_APIGROUPS='" | KUB_ROLE_APIGROUPS='" | ||
KUB_ROLE_RESOURCES='" | KUB_ROLE_RESOURCES='" | ||
+ | # | ||
KUB_ROLE_VERBS='" | KUB_ROLE_VERBS='" | ||
Line 372: | Line 373: | ||
CLUSTER_NAME=${KUB_CONTEXT}-cluster | CLUSTER_NAME=${KUB_CONTEXT}-cluster | ||
CLUSTER_ENDPOINT=`kubectl get po -n kube-system -o jsonpath=" | CLUSTER_ENDPOINT=`kubectl get po -n kube-system -o jsonpath=" | ||
+ | [ -z " | ||
KUB_SYSTEM_TOKEN_SECRET=`kubectl get secret -n kube-system -o name | grep default-token | cut -d'/' | KUB_SYSTEM_TOKEN_SECRET=`kubectl get secret -n kube-system -o name | grep default-token | cut -d'/' | ||
CLUSTER_CA=`kubectl get secret -n kube-system $KUB_SYSTEM_TOKEN_SECRET -o jsonpath={" | CLUSTER_CA=`kubectl get secret -n kube-system $KUB_SYSTEM_TOKEN_SECRET -o jsonpath={" | ||
Line 449: | Line 451: | ||
name: ${KUB_USERGROUP} | name: ${KUB_USERGROUP} | ||
apiGroup: rbac.authorization.k8s.io | apiGroup: rbac.authorization.k8s.io | ||
- | roleRef: | + | roleRef: |
- | kind: ClusterRole | + | kind: ClusterRole |
name: ${KUB_ROLE_NAME} | name: ${KUB_ROLE_NAME} | ||
- | | + | |
EOF | EOF | ||
fi | fi | ||
Line 479: | Line 481: | ||
name: ${KUB_USERGROUP} | name: ${KUB_USERGROUP} | ||
apiGroup: rbac.authorization.k8s.io | apiGroup: rbac.authorization.k8s.io | ||
- | roleRef: | + | roleRef: |
- | kind: Role | + | kind: Role |
name: ${KUB_ROLE_NAME} | name: ${KUB_ROLE_NAME} | ||
- | | + | |
EOF | EOF | ||
fi | fi | ||
Line 510: | Line 512: | ||
current-context: | current-context: | ||
EOF | EOF | ||
+ | |||
+ | kubectl delete certificatesigningrequests ${KUB_USERNAME}_csr | ||
</ | </ | ||
===== Создание закрытого ключа пользователя и запроса сертификата ===== | ===== Создание закрытого ключа пользователя и запроса сертификата ===== | ||
Line 907: | Line 911: | ||
for pv in $PVs; do ./resetpv --etcd-ca ./ca.crt --etcd-cert ./ | for pv in $PVs; do ./resetpv --etcd-ca ./ca.crt --etcd-cert ./ | ||
+ | ====== Распределить поды деплоймента по разным нодам кластера ====== | ||
+ | < | ||
+ | apiVersion: apps/v1 | ||
+ | kind: Deployment | ||
+ | metadata: | ||
+ | name: my-service | ||
+ | labels: | ||
+ | app: my-service | ||
+ | spec: | ||
+ | replicas: 2 | ||
+ | selector: | ||
+ | matchLabels: | ||
+ | app: my-service | ||
+ | template: | ||
+ | metadata: | ||
+ | labels: | ||
+ | app: my-service | ||
+ | spec: | ||
+ | topologySpreadConstraints: | ||
+ | - maxSkew: 1 | ||
+ | topologyKey: | ||
+ | whenUnsatisfiable: | ||
+ | labelSelector: | ||
+ | matchLabels: | ||
+ | app: my-service | ||
+ | </ | ||
+ | Либо: | ||
+ | < | ||
+ | affinity: | ||
+ | podAntiAffinity: | ||
+ | requiredDuringSchedulingIgnoredDuringExecution: | ||
+ | - labelSelector: | ||
+ | matchExpressions: | ||
+ | - key: app | ||
+ | operator: In | ||
+ | values: | ||
+ | - {{ .Release.Name }}-logstash | ||
+ | topologyKey: | ||
+ | </ | ||
+ | |||
+ | ====== Headless Services для Stafullset ====== | ||
+ | И другие вопросы про то как давать доступ к индивидуальным подам реплик стейтфуллсетов. \\ | ||
+ | https:// | ||
+ | |||
+ | Обычно сервисы используются в k8s для балансировки запросов на все реплики микросервиса, | ||
+ | Что такое **Statefullset** - это способ создать набор именованных реплик сервиса, | ||
+ | Что такое **Headless Service** - это сервис, | ||
+ | < | ||
+ | например: | ||
+ | app-0.myapp.default.svc.cluster.local. | ||
+ | Вопрос - а как же можно опубликовать именованную реплику в составе Statefullset' | ||
+ | Все просто - каждый под, управляеый Statefullset' | ||
+ | < | ||
+ | kind: Service | ||
+ | metadata: | ||
+ | name: app-0 | ||
+ | spec: | ||
+ | type: LoadBalancer | ||
+ | selector: | ||
+ | statefulset.kubernetes.io/ | ||
+ | ports: | ||
+ | - protocol: TCP | ||
+ | port: 80 | ||
+ | targetPort: 80</ | ||
+ | |||
+ | ====== Как скопировать секрет из одного неймспейса в другой ====== | ||
+ | kubectl get secret my-tlssecret --namespace=nginx-ns -o yaml | sed ' | ||
+ | |||
+ | ====== Список и спецификации СustomResourceDefinitions ====== | ||
+ | Список существующих в кластере **Сustom Resource Definitions** | ||
+ | kubectl get customresourcedefinitions | ||
+ | или | ||
+ | kubectl get crd | ||
+ | ну и посмотреть спецификацию: | ||
+ | kubectl describe crd < |