Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Next revisionBoth sides next revision
devops:kubernetes [2021/03/22 13:03] – [Обновление сертификатов] admindevops:kubernetes [2021/08/18 14:23] – [Скрипт] admin
Line 309: Line 309:
 В список: В список:
   kubectl -n elasticsearch patch sts es-data --type=json -p='[{"op": "add", "path": "/spec/template/spec/tolerations", "value":[{"effect":"NoSchedule","key":"node.kubernetes.io/rrr","operator":"Exists"}]}]'   kubectl -n elasticsearch patch sts es-data --type=json -p='[{"op": "add", "path": "/spec/template/spec/tolerations", "value":[{"effect":"NoSchedule","key":"node.kubernetes.io/rrr","operator":"Exists"}]}]'
 +Добавляем порт для контейнера в **Deployment**:
 +  kubectl patch deployment mcs-api --type=json -p='[{"op": "add", "path": "/spec/template/spec/containers/0/ports", "value":[{"containerPort": 5000}]}]'
  
 ===== Патчинг нескольких значений за раз ===== ===== Патчинг нескольких значений за раз =====
Line 350: Line 352:
 set -e set -e
  
-KUB_CONTEXT='kub-apps-test+KUB_CONTEXT='kubernetes-admin@kubernetes
-KUB_USERNAME='developer' +KUB_USERNAME='developer-ro
-KUB_USERGROUP='app-dev-full'+KUB_USERGROUP='mcs-ro'
 #cluster or ns (namespace) #cluster or ns (namespace)
 #AUTH_SCOPE='cluster' #AUTH_SCOPE='cluster'
 AUTH_SCOPE='ns' AUTH_SCOPE='ns'
 # If AUTH_SCOPE = ns then we need namespace name # If AUTH_SCOPE = ns then we need namespace name
-KUB_NAMESPACE='app-dev+KUB_NAMESPACE='default
-KUB_ROLE_NAME='app-dev-full'+KUB_ROLE_NAME="${KUB_USERGROUP}-role"
 # Comma separated quoted - '"get", "list"'. For all use "*" # Comma separated quoted - '"get", "list"'. For all use "*"
 KUB_ROLE_APIGROUPS='"*"' KUB_ROLE_APIGROUPS='"*"'
 KUB_ROLE_RESOURCES='"*"' KUB_ROLE_RESOURCES='"*"'
-KUB_ROLE_VERBS='"*"'+KUB_ROLE_VERBS='"get", "list"'
  
 echo "Switching to context '${KUB_CONTEXT}'..." echo "Switching to context '${KUB_CONTEXT}'..."
Line 447: Line 449:
   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}
- apiGroup: rbac.authorization.k8s.io + apiGroup: rbac.authorization.k8s.io
 EOF EOF
 fi fi
Line 477: Line 479:
   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}
- apiGroup: rbac.authorization.k8s.io + apiGroup: rbac.authorization.k8s.io
 EOF EOF
 fi fi
Line 508: Line 510:
 current-context: ${KUB_USERNAME}-${CLUSTER_NAME} current-context: ${KUB_USERNAME}-${CLUSTER_NAME}
 EOF EOF
 +
 +kubectl delete certificatesigningrequests ${KUB_USERNAME}_csr
 </code> </code>
 ===== Создание закрытого ключа пользователя и запроса сертификата ===== ===== Создание закрытого ключа пользователя и запроса сертификата =====
Line 875: Line 879:
 https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04 https://www.digitalocean.com/community/tutorials/how-to-create-a-kubernetes-cluster-using-kubeadm-on-ubuntu-18-04
  
-====== DevOps ====== +====== Отмена удаления PersistentVolume ====== 
-Мониторинг веб-приложения - graphana \\+Если так случайно вышло, что вы удалили **PersistentVolume**, то не отчаивайтесь! Он будет находитьтся в состоянии **Terminating** до тех пор, пока существуют **pod**, куда он смонтирован и **PersistentVolumeClaim**, которая породила этот PV и удаление можно отменить. \\ 
 +На помощь приходит специальная утилитка: https://github.com/jianz/k8s-reset-terminating-pv 
 +  git clone https://github.com/jianz/k8s-reset-terminating-pv.git 
 +  cd k8s-reset-terminating-pv 
 +  go build -o resetpv 
 +Собранный бинарник: {{ :devops:resetpv.tar.gz |}} \\ 
 +Заходим на мастер-ноду, архивируем сертификаты и смотрим какой сертификат за что отвечает: 
 +  ssh user@master-node 
 +  sudo -H tar -cvzf ~/etcd-pki.tar.gz /etc/kubernetes/pki/etcd 
 +  sudo docker  ps --no-trunc | grep etcd 
 +  exit 
 +В выводе среди всего прочего будет такое: 
 +<code>--advertise-client-urls=https://10.77.68.1:2379 
 +--cert-file=/etc/kubernetes/pki/etcd/server.crt 
 +--key-file=/etc/kubernetes/pki/etcd/server.key 
 +--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt</code> 
 +В вашей инсталляции имена, пути и порты могут быть иными. \\ 
 +И забираем с мастер-ноды кластера архив с сертификатами, которые необходимы для подключения к **etcd** кластера: 
 +  scp user@master-node:/home/user/etcd-pki.tar.gz ./ 
 +  tar -xvf ./etcd-pki.tar.gя 
 +  mv ./etc/kubernetes/pki/etcd/* ./ 
 +И дальше применяем утилиту: 
 +  ./resetpv --etcd-ca ./ca.crt --etcd-cert ./server.crt --etcd-key ./server.key --etcd-host 10.77.68.1 --etcd-port 2379 pv-name 
 +Если вдруг так вышло, что вы удалили все PV в кластере (как я - хотел удалить **pvc** в неймспейсе но просто опечатался и вместо **pvc** ввел **pv**): 
 +  kubectl delete -n namespace pv --all 
 +то чтобы отменить удаление всех PV делаем так: 
 +  PVs=`kubectl get pv | grep Terminating | awk '{print $1}' | grep -v NAME` 
 +  for pv in $PVs; do ./resetpv --etcd-ca ./ca.crt --etcd-cert ./server.crt --etcd-key ./server.key --etcd-host 10.77.68.1 --etcd-port 2379 $pv; done
  
  • devops/kubernetes.txt
  • Last modified: 2023/11/30 08:03
  • by admin