kubernetes - bare metal - high load - (3master 3worker) - установка

Thank you for reading this post, don't forget to subscribe!

име­ет­ся 6 серверов
3 мастера
kub-master1-121
kub-master2-122
kub-master3-123
3 воркера:
kub-worker1-124
kub-worker2-125
kub-worker3-126

Что мы соби­ра­ем­ся полу­чить по итогу:

[root@kub-master1-121 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.121 kub-master1-121
192.168.1.122 kub-master2-122
192.168.1.123 kub-master3-123
192.168.1.124 kub-worker1-124
192.168.1.125 kub-worker2-125
192.168.1.126 kub-worker3-126

[root@kub-master1-121 ~]# ssh-keygen
ssh-copy-id kub-master1-121
ssh-copy-id kub-master2-122
ssh-copy-id kub-master3-123
ssh-copy-id kub-worker1-124
ssh-copy-id kub-worker2-125
ssh-copy-id kub-worker3-126

отклю­ча­ем НА ВСЕХ нодах swap
[root@kub-master1-121 ~]# cat /etc/fstab | grep swap
#/dev/mapper/centos-swap swap swap defaults 0 0
и SELINUX:
[root@kub-master1-121 ~]# cat /etc/selinux/config | grep ^SELINUX
SELINUX=disabled
SELINUXTYPE=targeted

 

Уста­нов­ка допол­ни­тель­но­го ПО:

1. ETCD

 

[root@kub-master1-121 ~]# yum install etcd -y
[root@kub-master2-122 ~]# yum install etcd -y
[root@kub-master3-123 ~]# yum install etcd -y

[root@kub-master1-121 ~]# mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup
[root@kub-master2-122 ~]# mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup
[root@kub-master3-123 ~]# mv /etc/etcd/etcd.conf /etc/etcd/etcd.conf.backup

[root@kub-master1-121 ~]# cat /etc/etcd/etcd.conf
# [member]
ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.121:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.121:2379,http://127.0.0.1:2379"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.121:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.1.121:2380,etcd2=http://192.168.1.122:2380,etcd3=http://192.168.1.123:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="ab5f20b33aa4"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.121:2379"

[root@kub-master2-122 ~]# cat /etc/etcd/etcd.conf
# [member]
ETCD_NAME=etcd2
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.122:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.122:2379,http://127.0.0.1:2379"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.122:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.1.121:2380,etcd2=http://192.168.1.122:2380,etcd3=http://192.168.1.123:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="ab5f20b33aa4"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.122:2379"

[root@kub-master3-123 ~]# cat /etc/etcd/etcd.conf
# [member]
ETCD_NAME=etcd3
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://192.168.1.123:2380"
ETCD_LISTEN_CLIENT_URLS="http://192.168.1.123:2379,http://127.0.0.1:2379"
#[cluster]
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.1.123:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.1.121:2380,etcd2=http://192.168.1.122:2380,etcd3=http://192.168.1.123:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="ab5f20b33aa4"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.1.123:2379"

 

[root@kub-master1-121 ~]# systemctl enable etcd
[root@kub-master1-121 ~]# systemctl start etcd
[root@kub-master2-122 ~]# systemctl enable etcd
[root@kub-master2-122 ~]# systemctl start etcd
[root@kub-master3-123 ~]# systemctl enable etcd
[root@kub-master3-123 ~]# systemctl start etcd

2. DOCKER

 

На ВСЕ ноды:

[codesyntax lang="php"]

[/codesyntax]

systemctl restart docker

3. kubelet kubeadm kubectl

 

На ВСЕХ нодах:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
cat <<EOF >  /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
При­ме­ня­ем:
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
Ини­ци­а­ли­зи­ру­ем кла­стер Kubernetes:
cat kub.yaml

[codesyntax lang="php"]

[/codesyntax]

так как это уста­рев­шая вер­сия то запус­ка­ем команду:
kubeadm config migrate --old-config kub.yaml --new-config kub-new.yaml
на выхо­де получаем:
cat kub-new.yaml
[codesyntax lang="php"]

[/codesyntax]
если что то необ­хо­ди­мо то пра­вим, после чего запус­ка­ем инициацию:
kubeadm init --config=kub-new.yaml --upload-certs
Если все успеш­но, то вы уви­ди­те при­мер­но следующее:

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

Созда­ем дирек­то­рию и кла­дем туда кон­фи­гу­ра­ци­он­ный файл для под­клю­че­ния к kubernetes API:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Про­ве­ря­ем рабо­то­спо­соб­ность наше­го API
kubectl get nodes
Долж­ны полу­чить ответ:

Перед добав­ле­ни­ем в кла­стер 2 и 3 масте­ра необ­хо­ди­мо ско­пи­ро­вать клю­чи кото­рые были сге­не­ри­ро­ва­ны на пер­вом мастере:
[root@kub-master1-121 ~]# scp -r /etc/kubernetes/pki kub-master2-122:/etc/kubernetes/pki
[root@kub-master1-121 ~]# scp -r /etc/kubernetes/pki kub-master3-123:/etc/kubernetes/pki
Далее копи­ру­ем коман­ду для join масте­ров и запус­ка­ем ее на 2 и 3 сервере:
kubeadm join 192.168.1.121:6443 --token 1n0mn1.0z0jfpqk6og5s8p0 \
--discovery-token-ca-cert-hash sha256:09ef212a4f96a7652ec9e3756e2abdb6d4cc08577636e46882e7e4b6092d1f21 \
--control-plane --certificate-key 919f0dc3d7af021ddb78cffd97d3babe0f603deaca7aa89a5d7f34c14d88af05
вывод при­мер­но такой:

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

не забы­ва­ем на добав­лен­ных мастер нодах выполнять:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

После удач­но­го завер­ше­ния мы уви­дим новые мастера

kubectl get nodes

На теку­щий момент схе­ма такая:

все наши масте­ра сей­час смот­рят на пер­вый мастер:
192.168.1.121
вне­сём изме­не­ния, что­бы каж­дый из них смот­рел на себя, для это­го надо попра­вить пару файлов:
[root@kub-master2-122 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.122:6443|g' /root/.kube/config
[root@kub-master2-122 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.122:6443|g' /etc/kubernetes/kubelet.conf
[root@kub-master2-122 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.122:6443|g' /etc/kubernetes/admin.conf
[root@kub-master2-122 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.122:6443|g' /etc/kubernetes/scheduler.conf
[root@kub-master2-122 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.122:6443|g' /etc/kubernetes/controller-manager.conf
[root@kub-master2-122 ~]# systemctl restart kubelet && systemctl restart docker

[root@kub-master3-123 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.123:6443|g' /root/.kube/config
[root@kub-master3-123 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.123:6443|g' /etc/kubernetes/kubelet.conf
[root@kub-master3-123 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.123:6443|g' /etc/kubernetes/admin.conf
[root@kub-master3-123 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.123:6443|g' /etc/kubernetes/scheduler.conf
[root@kub-master3-123 ~]# sed -i 's|server: https://192.168.1.121:6443|server: https://192.168.1.123:6443|g' /etc/kubernetes/controller-manager.conf
[root@kub-master3-123 ~]# systemctl restart kubelet && systemctl restart docker

 

Сер­ти­фи­ка­ты будут уда­лен­ны через 2 часа, токен для join будет уда­лен через 24 часа, токен для выгруз­ки сер­ти­фи­ка­тов уда­лит­ся через 1 час

Смот­рим наши токены :

kubeadm token list

вор­кер ноды добав­ля­ем командой:

kubeadm join 192.168.1.121:6443 --token 1n0mn1.0z0jfpqk6og5s8p0 \
--discovery-token-ca-cert-hash sha256:09ef212a4f96a7652ec9e3756e2abdb6d4cc08577636e46882e7e4b6092d1f21

вывод будет при­мер­но такой:

[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

 

Все сер­ве­ра добав­ле­ны, но они в ста­ту­се NotReady. Это из-за отсут­ствия сети. В нашем при­ме­ре мы будем исполь­зо­вать сеть  calico. Для это­го уста­но­вим ее в наш кластер

Захо­дим на оф сайт.  На момент напи­са­ния ста­тьи самая послед­няя версия:
https://docs.projectcalico.org/v3.11/introduction/

выка­чи­ва­ем её

[root@kub-master1-121 ~]# curl https://docs.projectcalico.org/v3.11/manifests/calico.yaml -O
kubectl apply -f calico.yaml

вывод такой:
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

ну или мож­но сра­зу запу­стить самую послед­нюю версию:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

ждём пару минут и проверяем:
kubectl get nodes

базо­вая уста­нов­ка завершена.

на этом эта­пе схе­ма такая:

================================================

сге­не­ри­ро­вать токен для добав­ле­ния воркеров:
kubeadm token generate
kubeadm token create <generated-token> --print-join-command --ttl=24h

=================================================

Запуск подов на мастернодах

Для того, что­бы раз­ре­шить запуск подов на master нодах, выпол­ни­те сле­ду­ю­щую коман­ду на любом из мастеров

 

4.Устанавливаем haproxy на worknodes

Теперь мы име­ем рабо­чий кла­стер с тре­мя master нода­ми и тре­мя worker нодами.
Про­бле­ма в том, что сей­час наши worker ноды не име­ют HA режима.
Если посмот­реть на кон­фиг файл kubelet, то мы уви­дим, что наши worker ноды обра­ща­ют­ся толь­ко к одной master ноде из трех.

[root@kub-master1-121 ~]# cat /etc/kubernetes/kubelet.conf | grep server:
server: https://192.168.1.121:6443

При дан­ной кон­фи­гу­ра­ции, в слу­чае паде­ния kub-master1-121, worker нода поте­ря­ет связь с API сер­ве­ром кла­сте­ра. Что­бы наш кла­стер стал пол­но­стью HA, мы уста­но­вим на каж­дый из вор­ке­ров Load Balancer (Haproxy), кото­рый по round robin будет рас­ки­ды­вать запро­сы на три master ноды, а в кон­фи­гах kubelet на worker нодах мы поме­ня­ем адрес сер­ве­ра на 127.0.0.1:6443
Для нача­ла уста­но­вим HAProxy на каж­дую worker ноду.

[root@kub-worker1-124 ~]# yum -y install haproxy
[root@kub-worker2-125 ~]# yum -y install haproxy
[root@kub-worker3-126 ~]# yum -y install haproxy

[root@kub-worker1-124 ~]# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
[root@kub-worker2-125 ~]# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
[root@kub-worker3-126 ~]# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup

лог для haproxy вклю­ча­ет­ся сле­ду­ю­щим образом
добав­ля­ем сле­ду­ю­щий параметр:

cat /etc/sysconfig/rsyslog
SYSLOGD_OPTIONS="-c 2 -r"

В кон­фи­ге rsyslog рас­ком­мен­ти­ру­ем сле­ду­ю­щие параметры:
cat /etc/rsyslog.conf
$ModLoad imudp
$UDPServerRun 514
$ModLoad imtcp
$InputTCPServerRun 514
local2.*                                                /var/log/haproxy.log

пол­но­стью кон­фиг выггля­дит сле­ду­ю­щим образом:
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

 

кон­фиг haproxy выгля­дит сле­ду­ю­щим образом:
cat /etc/haproxy/haproxy.cfg

[codesyntax lang="php"]

[/codesyntax]

 

теперь копи­ру­ем кон­фи­ги на осталь­ные тачки:
[root@kub-worker1-124 ~]# scp /etc/rsyslog.conf 192.168.1.125:/etc/rsyslog.conf
[root@kub-worker1-124 ~]# scp /etc/rsyslog.conf 192.168.1.126:/etc/rsyslog.conf
[root@kub-worker1-124 ~]# scp /etc/haproxy/haproxy.cfg 192.168.1.125:/etc/haproxy/haproxy.cfg
[root@kub-worker1-124 ~]# scp /etc/haproxy/haproxy.cfg 192.168.1.126:/etc/haproxy/haproxy.cfg

добав­ля­ем haproxy в авто­за­пуск и стар­ту­ем его:

[root@kub-worker1-124 ~]# systemctl restart rsyslog
[root@kub-worker1-124 ~]# systemctl enable haproxy
[root@kub-worker1-124 ~]# systemctl start haproxy
[root@kub-worker2-125 ~]# systemctl restart rsyslog
[root@kub-worker2-125 ~]# systemctl enable haproxy
[root@kub-worker2-125 ~]# systemctl start haproxy
[root@kub-worker3-126 ~]# systemctl restart rsyslog
[root@kub-worker3-126 ~]# systemctl enable haproxy
[root@kub-worker3-126 ~]# systemctl start haproxy

Теперь нам нуж­но ска­зать kubelet, что­бы он обра­щал­ся на localhost вме­сто master ноды. Для это­го нуж­но отре­дак­ти­ро­вать зна­че­ние server в фай­ле /etc/kubernetes/kubelet.conf
и если есть в файле:
/etc/kubernetes/bootstrap-kubelet.conf

на всех worker нодах.

Зна­че­ние server долж­но при­нять вот такой вид:
server: https://127.0.0.1:6443

запус­ка­ем на всех воркерах:
sed -i 's|server: https://192.168.1.121:6443|server: https://127.0.0.1:6443|g' /etc/kubernetes/kubelet.conf

после пере­за­пус­ка­ем наш кластер
[root@kub-worker1-124 ~]# systemctl restart kubelet && systemctl restart docker
[root@kub-worker2-125 ~]# systemctl restart kubelet && systemctl restart docker
[root@kub-worker3-126 ~]# systemctl restart kubelet && systemctl restart docker

Про­ве­ря­ем что всё ок:

Пока что у нас нет при­ло­же­ний в кла­сте­ре, что­бы про­ве­рить рабо­ту HA. Но мы можем оста­но­вить рабо­ту kubelet на пер­вой master ноде и убе­дить­ся, что наш кла­стер остал­ся дееспособным.

[root@kub-master1-121 ~]# systemctl stop kubelet && systemctl stop docker

Про­ве­ря­ем со вто­рой master ноды
[root@kub-master1-121 ~]# kubectl get nodes
The connection to the server 192.168.1.121:6443 was refused - did you specify the right host or port?

всё вер­но, про­ве­ря­ем со вто­ро­го мастера:

При­зна­ком - что все про­шло без сбо­ев явля­ет­ся колон­ка READY где чис­ла до и после сле­ша равны

на этом эта­пе схе­ма такая

5.Установка Ingress контроллера 

 

Ingress кон­трол­лер — это допол­не­ние Kubernetes, c помо­щью кото­ро­го мы можем полу­чить доступ до наших при­ло­же­ний сна­ру­жи. Подроб­ное опи­са­ние есть в доку­мен­та­ции Kuberbnetes. Ingress кон­тро­ле­ров суще­ству­ет доста­точ­ное боль­шое коли­че­ство, я опи­шу кон­трол­лер от Nginx. Доку­мен­та­цию по рабо­те, настрой­ке и уста­нов­ке Ingress кон­трол­ле­ра от Nginx мож­но почи­тать на офи­ци­аль­ном сайте

При­сту­пим к уста­нов­ке, все коман­ды мож­но выпол­нять с
kub-master1-121
Уста­нав­ли­ва­ем сам кон­трол­лер. Дан­ная коман­да необ­хо­ди­ма не зави­си­мо от сре­ды развертывания:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

содер­жи­мое дан­но­го файла:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

 

Далее пред­ла­га­ют уста­но­вить Ingress и само­му  доба­вить NodePort:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
service/ingress-nginx created

дан­ный файл выгля­дит сле­ду­ю­щим образом:
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
cat  service-nodeport.yaml
[codesyntax lang="php" blockstate="collapsed"]

[/codesyntax]

ну и всё, мы полу­чи­ли кла­стер кото­рый рабо­та­ем и кото­ро­му пофиг на паде­ние мастер ноды, схе­ма полу­чи­лась кото­рую и хоте­ли изначально:

Уста­нов­ка кла­сте­ра завер­ше­на, всё работает.

==================================================

 

Разбор проблем:

Посмот­реть пол­ную инфор­ма­цию по поду:

kubectl describe pod -n kube-system calico-kube-controllers-5c45f5bd9f-plrfr

посмот­реть логи контейнера:
kubectl logs -n ingress-nginx nginx-ingress-controller-5bb8fb4bb6-rm5pv

посмот­реть все поды, на всех namespaces:
kubectl get pods --all-namespaces

посмот­реть инфор­ма­цию по всем нодам
kubectl describe node

kubernetes commands

kubectl get pods && kubectl get services --all-namespaces

kubectl get nodes - спи­сок нодов

kubectl taint nodes --all node-role.kubernetes.io/master- - запус­ка подов на мастере.

kubectl get pod redis --watch

kubectl cluster-info dump - собрать всю инфу (log/логи)

kubectl delete service,deployment nginx - уда­лить сер­вис и поды nginx

kubectl get pod NAME --output=yaml - пока­зать зна­че­ние пода

kubectl get deploy elasticsearch -o yaml - пока­зать deployment в yaml

kubectl describe pod NAME --namespace=NAME - пока­зать зна­че­ния пода

kubectl delete pod NAME --grace-period=0 --force

kubectl logs NAME - посмот­реть логи контейнера

kubectl logs -f NAME - посмот­реть логи кон­тей­не­ра в интер­ак­тив­ном режиме

kubectl exec -ti NAME bash - интер­ак­тив­ный режим bash

kubectl expose deployment nginx --type=NodePort --port=80 - выста­вить сер­вис наружу

kubectl create -f ingress.yml - созда­ние точ­ки вхо­да ingress

kubectl delete service NAME -n NAMESPACE

kubectl delete service NAME

kubectl delete deployment NAME

kubectl get deployments - выве­сти спи­сок Deployments

kubectl get rs - спи­сок ReplicaSet

kubectl rollout history deployment/nginx

kubectl set resources deployment/nginx -c=nginx --limits=cpu=200m,memory=512Mi

kubectl exec -ti -n monitoring prometheus-deployment-6bf45557bd-f5bvx -- /bin/sh

ubectl --namespace kube-system delete deployment kubernetes-dashboard

==================rollout and rollback===============

kubectl set image deployment.v1.apps/nginx-deployment nginx=nginx:1.91 --record=true

kubectl describe deployment - опи­сать развертывание

kubectl rollout history deployment/nginx - вывод исто­рии развертывания

kubectl rollout history deployment/nginx --revision=1 - опи­са­ние исто­рии реви­зии №1

kubectl rollout undo deployment/nginx --to-revision=2 - откат к реви­зии 2

kubectl rollout status - про­ве­рить состо­я­ние развертывания

==================scale=================================

kubectl scale deployment/nginx --replicas=10

===================Cronjobs=============================

kubectl create -f cronjob.yml

kubectl get cronjob NAME

kubectl delete cronjob NAME

kubectl get jobs --watch

========================Configmap================================
kubectl get configmap NAME -n NAMESPACE

kubectl describe configmap NAME -n NAMESPACE

kubectl delete configmap NAME -n NAMESPACE

=======================proxy=====================================

kubectl proxy --address="192.168.0.105" -p 8001 --accept-hosts='^*$'

=====================clusterrole=================================

kubectl delete clusterrolebinding cluster-system-anonymous - уда­ле­ние роли в кластере

kubectk get clusterrole - вывод спис­ка ролей

kubectl get clusterrole system:NAME -o yaml

oc create clusterrolebinding grafana1 --clusterrole=cluster-monitoring-operator --user=grafana1
====================volumes======================================
kubectl get pv NAME - вывод спис­ка томов PersistantVolume

kubectl delete pv NAME - уда­ле­ние тома PersistantVolume

kubectl delete pvc NAME - уда­ле­ние claim

kubectl get pvc NAME_PV - Вывод спис­ка claim для PersistantVolume

grafana-pv-volume - опи­са­ние pvc

======================secrets====================================
kubectl create secret generic db-user-pass --from-file=./username.txt --from-file=./password.txt - создать secret db-user-pass на осно­ве файлов

kubectl get secrets - вывод спис­ка для secrets

kubectl describe secrets/db-user-pass

kubectl get secret db-user-pass -o yaml - вывод логи­на и паро­ля secret db-user-pass

kubectl -n kube-system describe secret deployment-controller-token-9pn6n - полу­чить token для дашборда
=====================network=====================================

kubectl expose deployment hello-world --type=LoadBalancer --name=my-service - созда­ние Service для Deployment hello-world с типом лоадбалансера.

=====================load balancer===============================
1. При­мер лоад балан­се­ра меж­ду 5 подами.

kubectl run hello-world --replicas=5 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080

kubectl expose deployment hello-world --type=LoadBalancer --name=my-service
====================================kube-adm======================
kubectl -n kube-system get cm kubeadm-config -oyaml - Про­смотр ControlPlaneEndpoint для изме­не­ния IP для kube-api
kubectl -n kube-system edit cm kubeadm-config -oyaml - Редак­ти­ру­ем ControlPlaneEndpoint для изме­не­ния IP для kube-api
===================================INTERACTIVE CONTAINER===========================================
kubectl run -i --tty --rm debug --image=python:3.8.0b1-slim --restart=Never -- sh
=================================ROLES Troubleshooting=============================================
oc adm policy add-role-to-user admin nurlan -n load-test - доба­вить роль адми­на на namespace load-test для юзе­ра nurlan
oc get rolebinding.rbac -n openshift-monitoring
oc describe rolebinding.rbac -n NAMESPACE
oc get clusterrole - спи­сок ролей
oc get clusterrolebind - спи­сок clusterrolebinding
oc create clusterrolebinding grafana1 --clusterrole=cluster-monitoring-operator --user=grafana1 - созда­ние clusterrolebinding с назва­ни­ем grafana1 для юзе­ра grafana1
oc get clusterrolebinding grafana1 - пока­зать role binding для поль­зо­ва­те­ля grafana1