Оригинальная ссылка:Руководство по развертыванию Istio 1.4
Istio находится в процессе быстрого итеративного обновления, и его метод развертывания также постоянно обновляется.Метод установки, который я представил в версии 1.0 ранее, больше не применим к последней версии 1.4. В будущем основным методом развертывания будет использование istioctl для развертывания, и helm может постепенно отойти в сторону~~
Перед развертыванием Istio сначала необходимо убедиться, что кластер Kubernetes (версия kubernetes рекомендуется в1.13
выше) развернул и настроил локальный клиент kubectl.
1. Подготовка среды Kubernetes
Чтобы быстро подготовить среду kubernetes, мы можем использовать sealos для развертывания, шаги следующие:
Предварительные условия
- скачатьавтономный установочный пакет kubernetes
- скачатьПоследняя версия силоса
- Обязательно синхронизируйте время сервера
- Имя хоста не может повторяться
Установить кластер кубернетес
$ sealos init --master 192.168.0.2 \
--node 192.168.0.3 \
--node 192.168.0.4 \
--node 192.168.0.5 \
--user root \
--passwd your-server-password \
--version v1.16.3 \
--pkg-url /root/kube1.16.3.tar.gz
Убедитесь, что установка прошла нормально:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
sealos01 Ready master 18h v1.16.3
sealos02 Ready <none> 18h v1.16.3
sealos03 Ready <none> 18h v1.16.3
sealos04 Ready <none> 18h v1.16.3
2. Загрузите файл развертывания Istio.
Вы можете скачать его с GitHubreleaseЗагрузите istio со страницы или загрузите его напрямую с помощью следующей команды:
$ curl -L https://istio.io/downloadIstio | sh -
После завершения загрузки вы получитеistio-1.4.2
каталог, который содержит:
-
install/kubernetes
: Установочные файлы для платформы Kubernetes. -
samples
: пример приложения -
bin
: двоичный файл istioctl, который можно использовать для ручного внедрения sidecar-прокси.
Войтиistio-1.4.2
содержание.
$ cd istio-1.4.2
$ tree -L 1 ./
./
├── bin
├── demo.yaml
├── install
├── LICENSE
├── manifest.yaml
├── README.md
├── samples
└── tools
4 directories, 4 files
скопировать istioctl в/usr/local/bin/
середина:
$ cp bin/istioctl /usr/local/bin/
Включить автодополнение для istioctl
bash
будетtools
Каталогistioctl.bash
Скопируйте в каталог $HOME:
$ cp tools/istioctl.bash ~/
существует~/.bashrc
Добавьте строку в:
source ~/istioctl.bash
Приложение вступает в силу:
$ source ~/.bashrc
zsh
будетtools
в каталоге_istioctl
Скопируйте в каталог $HOME:
$ cp tools/_istioctl ~/
существует~/.zshrc
Добавьте строку в:
source ~/_istioctl
Приложение вступает в силу:
$ source ~/.zshrc
3. Разверните Istio
istioctl предоставляет множество файлов конфигурации установки, которые можно просмотреть с помощью следующей команды:
$ istioctl profile list
Istio configuration profiles:
minimal
remote
sds
default
demo
Различия между ними следующие:
default | demo | minimal | sds | remote | |
---|---|---|---|---|---|
основные компоненты | |||||
istio-citadel | X | X | X | X | |
istio-egressgateway | X | ||||
istio-galley | X | X | X | ||
istio-ingressgateway | X | X | X | ||
istio-nodeagent | X | ||||
istio-pilot | X | X | X | X | |
istio-policy | X | X | X | ||
istio-sidecar-injector | X | X | X | X | |
istio-telemetry | X | X | X | ||
Дополнения | |||||
Grafana | X | ||||
istio-tracing | X | ||||
kiali | X | ||||
prometheus | X | X | X |
какой знакXУказывает, что пришло время установить компонент.
Если вы просто хотите быстро опробовать все функциональные возможности, вы можете напрямую использовать файл конфигурации.demo
развернуть.
Перед официальным развертыванием необходимо объяснить два момента:
Istio CNI Plugin
Текущая реализация по умолчанию перенаправляет трафик пользовательских модулей на прокси-сервер с использованием привилегированных разрешений.istio-init
Этот контейнер инициализации делает это (запуск скрипта для записи iptables), вам нужно использоватьNET_ADMIN
возможности. Учащиеся, не знакомые с возможностями Linux, могут обратиться к моемуСерия возможностей Linux.
Основная цель разработки подключаемого модуля Istio CNI — устранить этот привилегированный контейнер инициализации и заменить его альтернативой, использующей механизм Kubernetes CNI для достижения той же функциональности. Конкретный принцип заключается в том, чтобы добавить логику обработки Istio в конец цепочки подключаемых модулей Kubernetes CNI и настроить сетевую конфигурацию для модуля istio в точках создания и уничтожения модуля: напишите iptables для пересылки сетевого трафика. пространства имен сети, в котором находится модуль, в прокси-процесс.
Для получения подробной информации см.официальная документация.
Использование подключаемого модуля Istio CNI для создания правил sidecar iptables — это, безусловно, путь в будущем, поэтому давайте попробуем его прямо сейчас.
Важные дополнительные модули для Kubernetes
Как мы все знаем, все основные компоненты Kubernetes работают на главном узле, однако есть некоторые дополнительные компоненты, которые также важны для всего кластера, такие как DNS и сервер метрик, они называютсяключевой плагин. Как только ключевые подключаемые модули перестают работать должным образом, весь кластер может работать неправильно, поэтому Kubernetes использует PriorityClass для обеспечения нормального планирования и работы ключевых подключаемых модулей. Сделать приложение в Kubernetesключевой плагин, нужен только егоpriorityClassName
установить какsystem-cluster-critical
илиsystem-node-critical
,вsystem-node-critical
наивысший приоритет.
Примечание. Критические плагины можно запускать только на
kube-system
в пространстве имен!
Для получения подробной информации см.официальная документация.
Далее официально устанавливаем istio, команда следующая:
$ istioctl manifest apply --set profile=demo \
--set cni.enabled=true --set cni.components.cni.namespace=kube-system \
--set values.gateways.istio-ingressgateway.type=ClusterIP
istioctl поддерживает два API:
В приведенной выше команде установки параметр cni использует IstioControlPlane API, аvalues.*
Используется Helm API.
После завершения развертывания проверьте состояние каждого компонента:
$ kubectl -n istio-system get pod
NAME READY STATUS RESTARTS AGE
grafana-6b65874977-8psph 1/1 Running 0 36s
istio-citadel-86dcf4c6b-nklp5 1/1 Running 0 37s
istio-egressgateway-68f754ccdd-m87m8 0/1 Running 0 37s
istio-galley-5fc6d6c45b-znwl9 1/1 Running 0 38s
istio-ingressgateway-6d759478d8-g5zz2 0/1 Running 0 37s
istio-pilot-5c4995d687-vf9c6 0/1 Running 0 37s
istio-policy-57b99968f-ssq28 1/1 Running 1 37s
istio-sidecar-injector-746f7c7bbb-qwc8l 1/1 Running 0 37s
istio-telemetry-854d8556d5-6znwb 1/1 Running 1 36s
istio-tracing-c66d67cd9-gjnkl 1/1 Running 0 38s
kiali-8559969566-jrdpn 1/1 Running 0 36s
prometheus-66c5887c86-vtbwb 1/1 Running 0 39s
$ kubectl -n kube-system get pod -l k8s-app=istio-cni-node
NAME READY STATUS RESTARTS AGE
istio-cni-node-k8zfb 1/1 Running 0 10m
istio-cni-node-kpwpc 1/1 Running 0 10m
istio-cni-node-nvblg 1/1 Running 0 10m
istio-cni-node-vk6jd 1/1 Running 0 10m
Вы можете видеть, что плагин cni был успешно установлен, проверьте, добавлена ли конфигурация в конец цепочки плагинов CNI:
$ cat /etc/cni/net.d/10-calico.conflist
{
"name": "k8s-pod-network",
"cniVersion": "0.3.1",
"plugins": [
...
{
"type": "istio-cni",
"log_level": "info",
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig",
"cni_bin_dir": "/opt/cni/bin",
"exclude_namespaces": [
"istio-system"
]
}
}
]
}
По умолчанию кромеistio-system
Вне пространства имен плагин istio cni будет отслеживать поды во всех других пространствах имен, но это не соответствует нашим потребностям.Более строгий подход — позволить плагину istio CNI хотя бы игнорироватьkube-system
,istio-system
Как сделать эти два пространства имен?
Это также очень просто, помните упомянутый ранее API IstioControlPlane? Вы можете напрямую использовать его, чтобы перезаписать предыдущую конфигурацию, просто создайтеIstioControlPlane
CRD в порядке. Например:
$ cat cni.yaml
apiVersion: install.istio.io/v1alpha2
kind: IstioControlPlane
spec:
cni:
enabled: true
components:
namespace: kube-system
values:
cni:
excludeNamespaces:
- istio-system
- kube-system
- monitoring
unvalidatedValues:
cni:
logLevel: info
$ istioctl manifest apply -f cni.yaml
Удалите все модули istio-cni-node:
$ kubectl -n kube-system delete pod -l k8s-app=istio-cni-node
Еще раз проверьте конфигурацию цепочки плагинов CNI:
$ cat /etc/cni/net.d/10-calico.conflist
{
"name": "k8s-pod-network",
"cniVersion": "0.3.1",
"plugins": [
...
{
"type": "istio-cni",
"log_level": "info",
"kubernetes": {
"kubeconfig": "/etc/cni/net.d/ZZZ-istio-cni-kubeconfig",
"cni_bin_dir": "/opt/cni/bin",
"exclude_namespaces": [
"istio-system",
"kube-system",
"monitoring"
]
}
}
]
}
4. Откройте панель инструментов
По этому поводу сказать нечего, просто выставляйте через Ingress Controller, можете сослаться на то, что я писал ранееРазвертывание Istio 1.0. Если вы используете Contour, вы можете обратиться к другой моей статье:Примечания к исследованию Contour (1): используйте Contour, чтобы взять на себя трафик Kubernetes с севера на юг..
Здесь я представляю новый способ,istioctl
Предусмотрена подкоманда для локального открытия различных информационных панелей:
$ istioctl dashboard --help
Access to Istio web UIs
Usage:
istioctl dashboard [flags]
istioctl dashboard [command]
Aliases:
dashboard, dash, d
Available Commands:
controlz Open ControlZ web UI
envoy Open Envoy admin web UI
grafana Open Grafana web UI
jaeger Open Jaeger web UI
kiali Open Kiali web UI
prometheus Open Prometheus web UI
zipkin Open Zipkin web UI
Например, чтобы открыть страницу Grafana локально, просто выполните следующую команду:
$ istioctl dashboard grafana
http://localhost:36813
На первый взгляд эта функция может показаться мне очень безвкусной, мой кластер не развернут локально, и эта команда не может указать IP прослушивания, поэтому я не могу открыть его локально браузером! Фактически, вы можете установить двоичные файлы kubectl и istioctl локально, затем подключиться к кластеру через kubeconfig и, наконец, локально выполнить указанную выше команду, чтобы открыть страницу.Удобно ли разработчикам тестировать? Пользователи Windows, когда я не говорил. . .
5. Откройте шлюз
Чтобы раскрыть Ingress Gateway, мы можем использоватьHostNetwork
режим, но вы обнаружите, что модуль ingressgateway не может быть запущен, потому что, если модуль установленHostNetwork=true
, то dnsPolicy начнется сClusterFirst
принуждают кDefault
. Входной шлюз должен быть подключен через доменное имя DNS во время процесса запуска.pilot
и другие компоненты, поэтому он не может быть запущен.
Мы можем заставитьdnsPolicy
Значение установлено наClusterFirstWithHostNet
Чтобы решить эту проблему, обратитесь к:Расширенное руководство по Kubernetes DNS.
Измененный файл конфигурации развертывания ingressgateway выглядит следующим образом:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: istio-ingressgateway
namespace: istio-system
...
spec:
...
template:
metadata:
...
spec:
affinity:
nodeAffinity:
...
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- 192.168.0.4 # 假设你想调度到这台主机上
...
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
restartPolicy: Always
...
Затем мы можем получить доступ к сервисам в сервисной сетке через URL-адрес шлюза в браузере. Я начну серию экспериментальных уроков позже. Все шаги в этой статье являются подготовкой к более позднему. Если вы хотите следовать за мной, чтобы провести следующие эксперименты, обязательно выполните подготовку, описанную в этой статье.
Публичный аккаунт WeChat
Отсканируйте QR-код ниже, чтобы подписаться на официальную учетную запись WeChat, и ответьте на официальную учетную запись ◉Добавить группу◉, чтобы присоединиться к нашей облачной коммуникационной группе и обсудить облачные технологии с Сунь Хунляном, директором Чжаном, Ян Мином и другими важными шишками.