Шпаргалка по kubernetes
Задачи:
- Установить Kubernetes
- Создать конфигурацию, состоящую из Deploymen, HorizontalPodAutoscaler, Service, ConfigMap
Нужно создать на DNS сервере или в файле hosts соответствия, на примере таких:
- 192.168.254.10 c1-control-plane
- 192.168.254.11 c1-worker-1
- 192.168.254.12 c1-worker-2
Загружаем необходимые модули и делаем необходимые настройки
cat << EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
cat << EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
Отключаем swap – это требуется для кубика
sudo sed -i '/swap/d' /etc/fstab
swapoff -a
Применяем новые настройки или перезагружаем сервер
modprobe overlay
modprobe br_netfilter
sysctl –system
Устанавливаем NTP сервер
apt install -y chrony
Устанавливаем containerd
apt install -y curl gpg lsb-release apparmor apparmor-utils
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt-get install -y containerd.io
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
Редактируем файл /etc/containerd/config.toml
Добавляем параметр SystemdCgroup = true
к [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
чтобы получилось
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
systemctl restart containerd
Установка главных компонентов
apt-get install -y apt-transport-https ca-certificates curl
curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list
apt-get update
apt install iptables libiptc0/stable libxtables12/stable
apt-get install -y kubelet=1.21.0-00 kubeadm=1.21.0-00 kubectl=1.21.0-00
apt-mark hold kubelet kubeadm kubectl
Следующие команды запускаются только на Мастер-сервере
kubeadm init --pod-network-cidr 172.20.0.0/16 --kubernetes-version 1.21.0
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Вывод команды исполняем на worker сервере
kubeadm token create --print-join-command
kubectl get nodes
Основные команды: Показать список подов
kubectl get pods
Показать список всех подов
kubectl get pods -A
Отображать состояние подов в интерактивном режиме
kubectl get pods -w
Вывод событий кластера
kubectl get events -w
Создать под с портом 80 и образом nginx:latest
kubectl run hello –image=nginx:latest –port=80
Вывод подробной информации о поде
kubectl describe pods hello
Вывести журнал событий пода, если в контейнере указан tail будет отображаться он
kubectl logs hello
Вход в контейнер
kubectl exec it hello bash
Применение манифеста из файла
kubectl apply -f hello.yaml
Удаление манифеста из фала
kubectl delete -f hello.yaml
Отобразить список развертываний
kubectl get deploy
Вывести список реплик
kubectl get rs
Создание развертывания
kubectl create deploy hello –image nginx:latest
Вывод описания развертывания
kubectl describe deploy hello
Создание нескольких копий
kubectl scale deploy hello –replicas 4
Настройка автомасштабирования
kubectl autoscale deploy hello –min=10 –max=15 –cpu-percent=80
Вывод информации по после команды выше
kubectl get hpa
Замена образа в развертывании
kubectl set image deploy/hello nginx=httpd:latest –record
Вывод статуса обновления
kubectl rollout status deploy/hello
Вывод список хранимых копий
kubectl rollout history deploy/hello
Отменить последнее обновление
kubectl rollout undo deploy/hello
Откат к определенной версии
kubectl rollout undo deploy/hello –to-version=3
Обновление образа из репозитория
kubectl rollout restart deploy/hello
Удаление развертывания
kubectl delete deploy hello
Создание сервиса
kubectl expose deploy hello –type=ClusterIP/NodePort/LoadBalancer –port 80
Пример конфига, php-my-admin нужно заменить
apiVersion : apps/v1
kind: Deployment
metadata:
name: php-my-admin-deployment-autoscaling
labels:
app : php-my-admin-deployment
spec:
selector:
matchLabels:
project: php-my-admin
template:
metadata:
labels:
project: php-my-admin # Service will look for those PODS Labels!!!
spec:
containers:
- name : php-my-admin-web
image: h963z57/phpmyadmin:main
imagePullPolicy: "Always"
ports:
- containerPort: 80
volumeMounts:
- name: config-php-my-admin
mountPath: /mnt
volumes:
- name: config-php-my-admin
configMap:
name: php-my-admin-configmap
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: php-my-admin-autoscaling
spec:
scaleTargetRef:
apiVersion: apps/v2beta1v1
kind: Deployment
name: php-my-admin-deployment-autoscaling
minReplicas: 1
maxReplicas: 2
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 70
- type: Resource
resource:
name: memory
targetAverageUtilization: 80
---
apiVersion: v1
kind: Service
metadata:
name: php-my-admin-autoscaling-pod-service
labels:
env : prod
owner: h963z57
spec:
selector:
project: php-my-admin # Selecting PODs with those Labels
ports:
- name : app-listener
protocol : TCP
port : 80 # Port on Load Balancer
targetPort: 80 # Port on Pod
nodePort: 30007
# clusterIP: 10.105.214.244
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
name: php-my-admin-configmap
data:
config.inc.php: |
<Указываем текст конфигурационного файла>