Среда выполнения контейнеров: containerd
Поддерживаемая версия Kubernetes: версии выше v1.24.x
Имя хоста | IP-адрес | Комментарий |
---|---|---|
k8s-master01 | 192.168.0.101 | Главный узел Kubernetes master01 |
k8s-master02 | 192.168.0.102 | Главный узел Kubernetes master02 |
k8s-master03 | 192.168.0.103 | Главный узел Kubernetes master03 |
k8s-vip | 192.168.0.100 | Плавающий IP Kubernetes, созданный с помощью keepalived. Если используется публичное облако, пожалуйста, предварительно запросите этот плавающий IP |
# Добавьте описание каждого узла
cat << EOF >> /etc/hosts
192.168.0.100 k8s-vip
192.168.0.101 k8s-master01
192.168.0.102 k8s-master02
192.168.0.103 k8s-master03
EOF
# Версия операционной системы: Debian 11
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 11 (bullseye)
Release: 11
Codename: bullseye
# Версия containerd: 1.6.24
$ containerd --version
containerd containerd.io 1.6.24 61f9fd88f79f081d64d6fa3bb1a0dc71ec870523
# Версия nerdctl: 1.7.0
nerdctl --version
nerdctl version 1.7.0
# Версия buildkitd: v0.12.3
$ buildkitd --version
buildkitd github.com/moby/buildkit v0.12.3 438f47256f0decd64cc96084e22d3357da494c27
# Версия cni-plugins: v1.3.0
# Версия dorycli: v1.6.5
$ dorycli version
dorycli version: v1.6.5
install dory-engine version: v2.6.5
install dory-console version: v2.6.5
# Версия kubeadm: v1.28.0
$ kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"28", GitVersion:"v1.28.0", GitCommit:"855e7c48de7388eb330da0f8d9d2394ee818fb8d", GitTreeState:"clean", BuildDate:"2023-08-15T10:20:15Z", GoVersion:"go1.20.7", Compiler:"gc", Platform:"linux/amd64"}
# Версия kubernetes: v1.28.0
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane 35m v1.28.0
k8s-master02 Ready control-plane 31m v1.28.0
k8s-master03 Ready control-plane 30m v1.28.0
# Установите базовое программное обеспечение
apt-get -y update
apt-get -y upgrade
apt-get install -y sudo ca-certificates curl gnupg htop git jq tree
# Установите containerd
apt-get install apt-transport-https software-properties-common ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -cs) stable"
apt-get -y update
apt-get install -y containerd.io
systemctl status containerd
# Установите kubeadm
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get -y update
apt-get install -y kubelet kubeadm kubectl
kubeadm version
# Получите информацию об образе pause
PAUSE_IMAGE=$(kubeadm config images list --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers | grep pause)
echo ${PAUSE_IMAGE}
# Измените конфигурацию containerd
containerd config default > /etc/containerd/config.toml
# Настройте конфигурацию containerd, найдите и измените SystemdCgroup = true
vi /etc/containerd/config.toml
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
...
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
# Настройте конфигурацию containerd, найдите и измените sandbox_image, обратите внимание, что эта настройка соответствует ранее полученной информации об изображении паузы ${PAUSE_IMAGE}
vi /etc/containerd/config.toml
sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"
# Перезапустите containerd
systemctl restart containerd
# Установите cni
wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
mkdir -p /opt/cni/bin
tar Cxzvf /opt/cni/bin cni-plugins-linux-amd64-v1.3.0.tgz
# Установите nerdctl
wget
*Примечание: предоставленный перевод может содержать неточности или ошибки.* **Установка и настройка containerd, buildkit и Kubernetes**
1. Скачать файл *nerdctl-1.7.0-linux-amd64.tar.gz* по ссылке:
https://github.com/containerd/nerdctl/releases/download/v1.7.0/nerdctl-1.7.0-linux-amd64.tar.gz.
Распаковать файл командой:
tar Cxzvf /usr/local/bin nerdctl-1.7.0-linux-amd64.tar.gz
2. Автоматически завершить команду *nerdctl*:
nerdctl completion bash > /etc/bash_completion.d/nerdctl
3. Установить *buildkit*:
wget https://github.com/moby/buildkit/releases/download/v0.12.3/buildkit-v0.12.3.linux-amd64.tar.gz tar Cxzvf /usr/local/ buildkit-v0.12.3.linux-amd64.tar.gz
4. Настроить и запустить *buildkit* с помощью следующих команд:
cat << EOF > /etc/systemd/system/buildkit.service [Unit] Description=BuildKit Requires=buildkit.socket After=buildkit.socket Documentation=https://github.com/moby/buildkit
[Service] Type=notify ExecStart=/usr/local/bin/buildkitd --addr fd://
[Install] WantedBy=multi-user.target EOF
cat << EOF > /etc/systemd/system/buildkit.socket [Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit
[Socket] ListenStream=%t/buildkit/buildkitd.sock SocketMode=0660
[Install] WantedBy=sockets.target EOF
5. Перезагрузить демон systemd:
systemctl daemon-reload
6. Включить *buildkit*, запустив его сейчас:
systemctl enable buildkit --now
7. Проверить, может ли *nerdctl* управлять *containerd*:
nerdctl images nerdctl pull busybox nerdctl run --rm busybox uname -m
8. Проверить, можно ли использовать *buildkit* для создания образа:
cat << EOF > Dockerfile FROM alpine EOF nerdctl build -t xxx . nerdctl rmi xxx rm -f Dockerfile
9. **Установить Kubernetes**:
— На всех узлах установить программное обеспечение, связанное с Kubernetes.
```bash
# С помощью kubeadm предварительно загрузить необходимые образы контейнеров
kubeadm config images pull --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --cri-socket unix:///var/run/containerd/containerd.sock
— На узле k8s-master01 создать и запустить высокодоступный балансировщик нагрузки: keepalived, nginx-lb.
Примечание: проект dorycli находится по адресу: https://github.com/dory-engine/dorycli.
# Скачать dorycli
cd /root
wget https://github.com/dory-engine/dorycli/releases/download/v1.6.5/dorycli-v1.6.5-linux-amd64.tgz
tar zxvf dorycli-v1.6.5-linux-amd64.tgz
chmod a+x dorycli
mv dorycli /usr/bin/
# Настроить автозаполнение dorycli, чтобы можно было автоматически дополнять подкоманды и параметры с помощью клавиши TAB
dorycli completion bash -h
source <(dorycli completion bash)
dorycli completion bash > /etc/bash_completion.d/dorycli
# Вывести информацию о конфигурации HA-балансировщика нагрузки с помощью команды dorycli install ha print
# и сохранить её в файле kubeadm-ha.yaml
dorycli install ha print --language zh > kubeadm-ha.yaml
# Изменить конфигурацию в файле kubeadm-ha.yaml в соответствии с требованиями
# Можно получить информацию об именах сетевых карт на каждом хосте с помощью следующей команды:
ip address
# Пример конфигурации ниже. Пожалуйста, измените конфигурацию в соответствии с вашими потребностями
cat kubeadm-ha.yaml
# Версия Kubernetes, которую необходимо установить
version: "v1.28.0"
# Настройки репозитория образов Kubernetes. Если не указано, используется официальный репозиторий по умолчанию
imageRepository: "registry.cn-hangzhou.aliyuncs.com/google_containers"
# IP-адрес плавающего кластера, созданного keepalived
virtualIp: 192.168.0.100
# Порт, сопоставленный с виртуальным портом плавающего IP-адреса
virtualPort: 16443
# Имя хоста, сопоставленное с плавающим IP-адресом. Пожалуйста, настройте сопоставление имён хостов в файле /etc/hosts
virtualHostname: k8s-vip
# Сокет времени выполнения контейнера Kubernetes
# В случае docker: unix:///var/run/cri-dockerd.sock
# В случае containerd: unix:///var/run/containerd/containerd.sock
# В случае cri-o: unix:///var/run/crio/crio.sock
criSocket: unix:///var/run/containerd/containerd.sock
# Диапазон подсети модуля Kubernetes. Если он не указан, используется диапазон подсети по умолчанию
podSubnet: "10.244.0.0/24"
# Диапазоны подсетей служб Kubernetes. Если они не указаны, используются диапазоны подсетей по умолчанию
serviceSubnet: "10.96.0.0/16"
# Пароль аутентификации keepalived. Если он не указан, будет использоваться случайно сгенерированный пароль
keepAlivedAuthPass: ""
# Конфигурация главного узла Kubernetes. Количество главных узлов должно быть равно единице, а количество узлов — не менее трёх
masterHosts:
# Имя хоста главного узла. Пожалуйста, настройте отображение имени хоста в файле /etc/hosts
- hostname: k8s-master01
# IP-адрес главного узла
ipAddress: 192.168.0.101
# Сетевой интерфейс, используемый для взаимодействия между главными узлами, который используется для привязки keepalived сетевой карты
networkInterface: eth0
# Приоритет keepalived, чем больше значение, тем выше приоритет. Приоритеты разных главных узлов не могут быть одинаковыми
keepalivedPriority: 120
# Имя хоста главного узла. Пожалуйста, настройте отображение имени хоста в файле /etc/hosts
- hostname: k8s-master02
# IP-адрес главного узла
ipAddress: 192.168.0.102
# Сетевой интерфейс, используемый для взаимодействия между главными узлами, который используется для привязки keepalived сетевой карты
networkInterface: eth0
# Приоритет keepalived, чем больше значение, тем выше приоритет. Приоритеты разных главных узлов не могут быть одинаковыми
keepalivedPriority: 110
# Имя хоста главного узла. Пожалуйста, настройте отображение имени хоста в файле /etc/hosts
- hostname: k8s-master03
# IP-адрес главного узла
ipAddress: 192.168.0.103
# Сетевой интерфейс, используемый для взаимодействия между главными узлами, который используется для привязки keepalived сетевой карты
networkInterface: eth0
# Приоритет keepalived, чем больше значение, тем выше приоритет. Приоритеты разных главных узлов не могут быть одинаковыми
keepalivedPriority: 100
# Создать конфигурацию HA-балансировщика нагрузки с помощью dorycli и вывести её в текущий каталог
# После выполнения команды будет выведено описание сгенерированного файла и описание файла конфигурации запуска
dorycli install ha script -o . -f kubeadm-ha.yaml --language zh
# Просмотреть сгенерированный файл конфигурации kubeadm-config.yaml, который используется kubeadm init для инициализации кластера Kubernetes
``` **Пример конфигурации:**
cat kubeadm-config.yaml
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
apiServer:
certSANs:
- "k8s-vip"
- "192.168.0.100"
- "k8s-master01"
- "192.168.0.101"
- "k8s-master02"
- "192.168.0.102"
- "k8s-master03"
- "192.168.0.103"
controlPlaneEndpoint: "192.168.0.100:16443"
networking:
podSubnet: "10.244.0.0/24"
serviceSubnet: "10.96.0.0/16"
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
nodeRegistration:
criSocket: unix:///var/run/containerd/containerd.sock
# 配置master节点的kubernetes高可用负载均衡器的文件路径
export LB_DIR=/data/k8s-lb
# 将高可用负载均衡器文件复制到k8s-master01
ssh k8s-master01 mkdir -p ${LB_DIR}
scp -r k8s-master01/nginx-lb k8s-master01/keepalived root@k8s-master01:${LB_DIR}
# 在 k8s-master01 节点上启动高可用负载均衡器
ssh k8s-master01 "cd ${LB_DIR}/keepalived/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
ssh k8s-master01 "cd ${LB_DIR}/nginx-lb/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
# 将高可用负载均衡器文件复制到k8s-master02
ssh k8s-master02 mkdir -p ${LB_DIR}
scp -r k8s-master02/nginx-lb k8s-master02/keepalived root@k8s-master02:${LB_DIR}
# 在 k8s-master02 节点上启动高可用负载均衡器
ssh k8s-master02 "cd ${LB_DIR}/keepalived/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
ssh k8s-master02 "cd ${LB_DIR}/nginx-lb/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
# 将高可用负载均衡器文件复制到k8s-master03
ssh k8s-master03 mkdir -p ${LB_DIR}
scp -r k8s-master03/nginx-lb k8s-master03/keepalived root@k8s-master03:${LB_DIR}
# 在 k8s-master03 节点上启动高可用负载均衡器
ssh k8s-master03 "cd ${LB_DIR}/keepalived/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
ssh k8s-master03 "cd ${LB_DIR}/nginx-lb/ && nerdctl compose stop && nerdctl compose rm -f && nerdctl compose up -d"
**Инициализация высокодоступного кластера Kubernetes:**
# На k8s-master01 используйте файл конфигурации kubeadm-config.yaml для инициализации высокодоступного кластера
kubeadm init --config=kubeadm-config.yaml --upload-certs
Команда kubeadm init выведет следующие подсказки, которые можно использовать на других master узлах для выполнения операции join:
Вы можете присоединиться к любому количеству узлов управления, выполнив следующую команду от имени root на каждом из них:
kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
--discovery-token-ca-cert-hash sha256:xxx \
--control-plane --certificate-key xxx
Обратите внимание, что ключ сертификата предоставляет доступ к конфиденциальным данным кластера, сохраните его в секрете!
В качестве меры предосторожности загруженные сертификаты будут удалены через два часа; при необходимости вы можете использовать
«kubeadm init phase upload-certs --upload-certs», чтобы перезагрузить сертификаты позже.
Затем вы можете присоединиться к любому числу рабочих узлов, выполнив следующие действия на каждом от имени root:
kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
--discovery-token-ca-cert-hash sha256:xxx
На узлах k8s-master02 и k8s-master03 выполните следующие команды, чтобы присоединить k8s-master02 и k8s-master03 к высокодоступному кластеру Kubernetes:
Не забудьте установить параметр --cri-socket unix:///var/run/containerd/containerd.sock в команде kubeadm join.
kubeadm join 192.168.0.100:16443 --token tgszyf.c9dicrflqy85juaf \
--discovery-token-ca-cert-hash sha256:xxx \
--control-plane --certificate-key xxx --cri-socket unix:///var/run/containerd/containerd.sock
На всех узлах master настройте доступ kubectl к кластеру kubernetes:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
На всех узлах master настройте автозаполнение kubectl, которое позволяет автоматически дополнять подкоманды и параметры с помощью клавиши TAB:
kubectl completion -h
kubectl completion bash > ~/.kube/completion.bash.inc
printf "
# Kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
source $HOME/.bash_profile
На узле k8s-master01 установите сетевой компонент cilium:
wget https://github.com/cilium/cilium-cli/releases/download/v0.15.6/cilium-linux-amd64.tar.gz
tar zxvf cilium-linux-amd64.tar.gz
mv cilium /usr/local/bin/ **Перевод текста запроса на русский язык:**
*Обратите внимание, здесь нужно установить cni.exclusive=false, чтобы избежать того, что cilium автоматически изменит конфигурацию nerdctl cni.*
cilium install --version 1.14.0 --set cni.chainingMode=portmap --set cni.exclusive=false
# Настройка всех master для разрешения планирования pod
kubectl taint nodes --all node-role.kubernetes.io/control-plane-
# Проверка состояния всех pod
kubectl get pods -A -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kube-system cilium-mwvsr 1/1 Running 0 21m 192.168.0.102 k8s-master02 <none> <none>
kube-system cilium-operator-b4dfbf784-zgr7v 1/1 Running 0 21m 192.168.0.102 k8s-master02 <none> <none>
kube-system cilium-v27l2 1/1 Running 0 21m 192.168.0.103 k8s-master03 <none> <none>
kube-system cilium-zbcdj 1/1 Running 0 21m 192.168.0.101 k8s-master01 <none> <none>
kube-system coredns-6554b8b87f-kp7tn 1/1 Running 0 30m 10.0.2.231 k8s-master03 <none> <none>
kube-system coredns-6554b8b87f-zlhgx 1/1 Running 0 30m 10.0.2.197 k8s-master03 <none> <none>
kube-system etcd-k8s-master01 1/1 Running 0 30m 192.168.0.101 k8s-master01 <none> <none>
kube-system etcd-k8s-master02 1/1 Running 0 26m 192.168.0.102 k8s-master02 <none> <none>
kube-system etcd-k8s-master03 1/1 Running 0 25m 192.168.0.103 k8s-master03 <none> <none>
kube-system kube-apiserver-k8s-master01 1/1 Running 0 30m 192.168.0.101 k8s-master01 <none> <none>
kube-system kube-apiserver-k8s-master02 1/1 Running 0 26m 192.168.0.102 k8s-master02 <none> <none>
kube-system kube-apiserver-k8s-master03 1/1 Running 1 (25m ago) 25m 192.168.0.103 k8s-master03 <none> <none>
kube-system kube-controller-manager-k8s-master01 1/1 Running 1 (26m ago) 30m 192.168.0.101 k8s-master01 <none> <none>
kube-system kube-controller-manager-k8s-master02 1/1 Running 0 26m 192.168.0.102 k8s-master02 <none> <none>
kube-system kube-controller-manager-k8s-master03 1/1 Running 0 24m 192.168.0.103 k8s-master03 <none> <none>
kube-system kube-proxy-gr2pt 1/1 Running 0 26m 192.168.0.102 k8s-master02 <none> <none>
kube-system kube-proxy-rkb9b 1/1 Running 0 30m 192.168.0.101 k8s-master01 <none> <none>
kube-system kube-proxy-rvmv4 1/1 Running 0 25m 192.168.0.103 k8s-master03 <none> <none>
kube-system kube-scheduler-k8s-master01 1/1 Running 1 (26m ago) 30m 192.168.0.101 k8s-master01 <none> <none>
kube-system kube-scheduler-k8s-master02 1/1 Running 0 26m 192.168.0.102 k8s-master02 <none> <none>
kube-system kube-scheduler-k8s-master03 1/1 Running 0 23m 192.168.0.103 k8s-master03 <none> <none>
# Проверка всех узлов
kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master01 Ready control-plane 31m v1.28.0
k8s-master02 Ready control-plane 27m v1.28.0
k8s-master03 Ready ## Установка istioctl, клиент можно скачать по адресу https://github.com/istio/istio/releases/tag/1.18.2
## Скачиваем и устанавливаем istioctl
Скачиваем istioctl:
wget https://github.com/istio/istio/releases/download/1.18.2/istioctl-1.18.2-linux-amd64.tar.gz
Распаковываем скачанный архив:
tar zxvf istioctl-1.18.2-linux-amd64.tar.gz
Перемещаем файл istioctl в папку /usr/bin/:
mv istioctl /usr/bin/
## Проверяем версию istioctl
Чтобы проверить версию istioctl, выполните следующую команду:
istioctl version
## Развёртывание istio с помощью istioctl на kubernetes
Развёртываем istio на kubernetes с помощью команды istioctl install. Для этого выполняем следующие шаги:
* Устанавливаем профиль demo:
istioctl install --set profile=demo
* Устанавливаем тип шлюза istio-ingressgateway как ClusterIP:
--set values.gateways.istio-ingressgateway.type=ClusterIP
* Устанавливаем политику imagePullPolicy как IfNotPresent:
--set values.global.imagePullPolicy=IfNotPresent
* Устанавливаем ограничения ресурсов для прокси-сервера init:
--set values.global.proxy_init.resources.limits.cpu=100m --set values.global.proxy_init.resources.limits.memory=100Mi
* Устанавливаем ограничения ресурсов для глобального прокси:
--set values.global.proxy.resources.limits.cpu=100m --set values.global.proxy.resources.limits.memory=100Mi
## Проверка развёртывания istio
Чтобы проверить развёртывание istio, выполните следующие команды:
kubectl -n istio-system get pods,svc
### Применение облачного движка Dory-Engine
Dory-Engine — это простой облачный движок для приложений, который позволяет разработчикам легко развертывать свои программы на различных платформах Kubernetes или локальных серверах без необходимости изучения сложных сценариев и конфигураций.
Основные преимущества Dory-Engine:
1. Не нужно изучать: не требуется изучать сложные сценарии и конфигурации для развертывания приложений на Kubernetes. Все настройки просты и понятны.
2. Не нужно писать: не нужно создавать сложные скрипты для сборки, упаковки и развертывания приложений. Достаточно нескольких простых настроек.
3. Не нужно настраивать: не нужно настраивать взаимодействие между различными инструментами DevOps и средами Kubernetes. Проект автоматически настраивает все необходимые параметры.
Инструкции по установке доступны на GitHub: https://github.com/dory-engine/dorycli.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )