[root@st01015vm192 /]# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
[root@st01015vm192 /]# uname -a
Linux st01015vm192 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Устанавливается по умолчанию от имени пользователя root
Временно закрыть обмен
swapoff -a
постоянно закрыто Закомментируйте следующую конфигурацию в /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
Kubelet не поддерживает SELinux. Здесь вам нужно перевести SELinux в разрешительный режим.
# Посмотреть статус
# /usr/sbin/sestatus -v
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl disable firewalld
systemctl stop firewalld
Создайте файл /etc/sysctl.d/k8s.conf. Содержимое файла следующее.
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
осуществлять
sysctl -p /etc/sysctl.d/k8s.conf
В RHEL/CentOS 7 сетевые запросы неправильно маршрутизируются из-за обхода iptables. Вы должны убедиться, что в вашей конфигурации sysctl для параметра net.bridge.bridge-nf-call-iptables установлено значение 1. Плагин подключает контейнер к мосту Linux. Плагин должен установить системный параметр net/bridge/bridge-nf-call-iptables равным 1, чтобы гарантировать правильную работу прокси-сервера iptables.
Наконец, в ядре включена пересылка IP (поэтому ядро будет обрабатывать пакеты из мостового контейнера): sysctl net.ipv4.ip_forward=1 Результатом всего этого является то, что все модули могут связываться друг с другом и отправлять трафик в Интернет.
сетевой плагин k8s https://kubernetes.io/zh/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/
сетевая модель k8s https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/
## резервное копирование
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
## Скачать исходники с Али
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
vim /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
yum clean all
yum makecache fast
yum -y update
Вы можете обратиться к официальной документации сайта https://docs.docker.com/engine/install/centos/.
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
--add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
Если вы хотите установить определенную версию докера
yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
Создайте файл /etc/docker/daemon.json и напишите конфигурацию. mkdir /etc/docker/ vim /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
// Если существование установлено внутри страны, добавьте следующую Конфигурацию
// "registry-mirrors": [
// "https://registry.docker-cn.com"
// ],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
Внутренний источник докера
"registry-mirrors": [
"https://1nj0zren.mirror.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com"
]
mkdir -p /etc/systemd/system/docker.service.d
systemctl daemon-reload
systemctl restart docker
Может быть сообщено об ошибке, ошибка docker.service
[root@st01015vm193 ~]# journalctl -xe
May 08 15:36:09 st01015vm193 systemd[1]: Dependency failed for Docker Application Container Engine.
-- Subject: Unit docker.service has failed
-- Defined-By: systemd
-- Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
--
-- Unit docker.service has failed.
--
-- The result is dependency.
May 08 15:36:09 st01015vm193 systemd[1]: Job docker.service/start failed with result 'dependency'.
May 08 15:36:09 st01015vm193 systemd[1]: Unit docker.socket entered failed state.
Вам необходимо добавить группу докеров в систему. Если вы выполнили базовую настройку, вам будет предложено указать, что у вас нет разрешений. Используйтеchattr -i для увеличения разрешений.
chattr -i /etc/group
groupadd docker
systemctl enable docker && systemctl start docker
yum install -y kubelet kubeadm kubectl kubernetes-cni --disableexcludes=kubernetes
systemctl enable --now kubelet && systemctl start kubelet
Толькосуществоватьmasterузелосуществлять
# masterузелосуществлять:
kubeadm init \
--apiserver-advertise-address 10.10.45.192 \
--pod-network-cidr=10.244.0.0/16
# --kubernetes-version=v1.15.0 \
# --image-repository=registry.aliyuncs.com/google_containers
# --apiserver-advertise-address Укажите интерфейс для связи с другими узлами
# --pod-network-cidr Укажите подсеть подсеть, этот CIDR необходимо использовать при использовании фаннелсети.
Может быть сообщено о следующей ошибке
[root@st01015vm192 ~]# kubeadm init \
> --apiserver-advertise-address 10.10.45.192 \
> --pod-network-cidr=10.244.0.0/16
W0508 15:09:35.577282 28115 configset.go:202] WARNING: kubeadm cannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
[init] Using Kubernetes version: v1.18.2
[preflight] Running pre-flight checks
error execution phase preflight: [preflight] Some fatal errors occurred:
[ERROR FileAvailable--etc-kubernetes-manifests-kube-apiserver.yaml]: /etc/kubernetes/manifests/kube-apiserver.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-controller-manager.yaml]: /etc/kubernetes/manifests/kube-controller-manager.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-kube-scheduler.yaml]: /etc/kubernetes/manifests/kube-scheduler.yaml already exists
[ERROR FileAvailable--etc-kubernetes-manifests-etcd.yaml]: /etc/kubernetes/manifests/etcd.yaml already exists
[ERROR Swap]: running with swap on is not supported. Please disable swap
[ERROR DirAvailable--var-lib-etcd]: /var/lib/etcd is not empty
[preflight] If you know what you are doing, you can make a check non-fatal with `--ignore-preflight-errors=...`
To see the stack trace of this error execute with --v=5 or higher
Добавьте этот параметр: –ignore-preflight-errors=all
Об ошибке сообщается следующим образом
[kubelet-check] It seems like the kubelet isn't running or healthy.
[kubelet-check] The HTTP call equal to 'curl -sSL http://localhost:10248/healthz' failed with error: Get http://localhost:10248/healthz: dial tcp [::1]:10248: connect: connection refused.
Как правило, kubelet не запускается. Проверьте статус, например журналы, чтобы найти причину. В моем случае своп был временно закрыт, что привело к открытию свопа после перезапуска машины: статус systemctl кубелета журналctl -xeu кубелет
После успешной установки появится следующая распечатка:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 10.10.45.192:6443 --token 82scon.3zopf5qra2b1s25i \
--discovery-token-ca-cert-hash sha256:2ea38c2a269d105b09bbf2964c089c067f0c8e7b44c0504b5854fd9acac263e0
# masterузелосуществлять:
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
## Проверьте, успешно ли установлен фланнал
sudo kubectl -n kube-system get po -l app=flannel -o wide
Согласно отпечатку, после построения кластера на узле master к работе кластера присоединяется узел изучить. kubeadm join 10.10.45.192:6443 --token 82scon.3zopf5qra2b1s25i –discovery-token-ca-cert-hash sha256:2ea38c2a269d105b09bbf2964c089c067f0c8e7b44c0504b5854fd9acac263e0
W0508 15:42:29.235510 5131 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings will be ignored when control-plane flag is not set.
[preflight] Running pre-flight checks
[WARNING Hostname]: hostname "st01015vm194" could not be reached
[WARNING Hostname]: hostname "st01015vm194": lookup st01015vm194 on 192.168.16.24:53: no such host
Измените /etc/hosts и добавьте хосты.
10.10.45.192 st01015vm192
10.10.45.193 st01015vm193
10.10.45.194 st01015vm194
Добавьте операцию кластера на существующем узле соответственно. После завершения изучения проверьте статус узла на существующем главном узле:
[root@st01015vm192 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
st01015vm192 Ready master 16d v1.18.2
st01015vm193 NotReady <none> 29s v1.18.2
st01015vm194 NotReady <none> 6m43s v1.18.2
Обнаружено, что статус узла всегда NotReady, проверьте статус модуля. kubectl get pods -n kube-system -o широкий
kube-flannel-ds-amd64-sdvpf 0/1 Init:ImagePullBackOff 0 8m12s 10.10.45.193 st01015vm193 <none> <none>
kube-flannel-ds-amd64-x58td 0/1 Init:ImagePullBackOff 0 14m 10.10.45.194 st01015vm194 <none> <none>
Обнаружено, что фланелевой модуль на дочернем узле сообщает об ошибке, просмотрите подробную информацию. kubectl описать pod -n kube-system kube-flannel-ds-amd64-sdvpf
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled <unknown> default-scheduler Successfully assigned kube-system/kube-flannel-ds-amd64-sdvpf to st01015vm193
Warning Failed 2m22s (x2 over 4m33s) kubelet, st01015vm193 Failed to pull image "quay.io/coreos/flannel:v0.12.0-amd64": rpc error: code = Unknown desc = context canceled
Warning Failed 2m22s (x2 over 4m33s) kubelet, st01015vm193 Error: ErrImagePull
Normal BackOff 2m11s (x2 over 4m33s) kubelet, st01015vm193 Back-off pulling image "quay.io/coreos/flannel:v0.12.0-amd64"
Warning Failed 2m11s (x2 over 4m33s) kubelet, st01015vm193 Error: ImagePullBackOff
Normal Pulling 118s (x3 over 7m28s) kubelet, st01015vm193 Pulling image "quay.io/coreos/flannel:v0.12.0-amd64"
Событие показывает, что получение образа не удалось. Это может быть сетевая проблема. После сбоя запуска модуля он попытается запуститься снова, поэтому подождите некоторое время или вручную извлеките образ на неисправном узле и измените его. imagePullPolicy при развертывании: Всегда
By default, the kubelet will try to pull each image from the specified registry. However, if the imagePullPolicy property of the container is set to IfNotPresent or Never, then a local image is used (preferentially or exclusively, respectively).
Измените imagePullPolicy: IfNotPresent.
docker pull quay.io/coreos/flannel:v0.12.0-amd64
[root@st01015vm192 ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
st01015vm192 Ready master 17d v1.18.2
st01015vm193 Ready <none> 33m v1.18.2
st01015vm194 Ready <none> 39m v1.18.2
Панель мониторинга не развернута по умолчанию. Его можно развернуть с помощью следующей команды:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0/aio/deploy/recommended.yaml Чтобы защитить данные вашего кластера, Dashboard по умолчанию развертывается с минимальной конфигурацией RBAC. В настоящее время Dashboard поддерживает вход только с использованием токенов Bearer.
Итак, нам нужно скачать yaml и настроить его. Мы модифицируем следующую конфигурацию
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
Изменено следующим образом
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
nodePort: 30001
selector:
k8s-app: kubernetes-dashboard
Измените политику получения изображения на IfNotPresent или Never и извлеките изображение на всех узлах k8s. Этот шаг позволяет избежать сбоя при получении изображения по сетевым причинам при создании модуля. docker pull kubernetesui/metrics-scraper:v1.0.4 docker pull kubernetesui/dashboard:v2.0.0
Если образ был успешно получен на определенной машине, но не удался на других машинах, вы можете создать резервную копию образа и восстановить его на неудачной машине. резервное копирование
docker save -o dashboard.tar kubernetesui/dashboard:v2.0.0
docker save -o metrics-scraper.tar kubernetesui/metrics-scraper:v1.0.4
снижение
docker load -i dashboard.tar
docker load -i metrics-scraper.tar
приложение
kubectl apply -f recommended.yaml
проверить статус
kubectl get pod,svc,ing,deploy -n kubernetes-dashboard
После запуска всех модулей проверьте
https://10.10.45.192:30001/
После завершения установки получите токен на главном узле.
[root@st01015vm192 ~]# kubectl -n kubernetes-dashboard get secret
NAME TYPE DATA AGE
default-token-25jb9 kubernetes.io/service-account-token 3 23m
kubernetes-dashboard-certs Opaque 0 23m
kubernetes-dashboard-csrf Opaque 1 23m
kubernetes-dashboard-key-holder Opaque 2 23m
kubernetes-dashboard-token-fm795 kubernetes.io/service-account-token 3 23m
[root@st01015vm192 ~]# kubectl -n kubernetes-dashboard describe secret kubernetes-dashboard-token-fm795
Name: kubernetes-dashboard-token-fm795
Namespace: kubernetes-dashboard
Labels: <none>
Annotations: kubernetes.io/service-account.name: kubernetes-dashboard
kubernetes.io/service-account.uid: af7a61cf-901f-42f9-bcbe-6f521d026bc2
Type: kubernetes.io/service-account-token
Data
====
ca.crt: 1025 bytes
namespace: 20 bytes
token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlhCZGZQa0MtaVFmMHJ0YTRBS083emppS0tKSENvb24xeW9scHIxY19zU0kifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZC10b2tlbi1mbTc5NSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImFmN2E2MWNmLTkwMWYtNDJmOS1iY2JlLTZmNTIxZDAyNmJjMiIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDprdWJlcm5ldGVzLWRhc2hib2FyZCJ9.haW6XvBAyog0BasqbaWJxPqWjTJKiemVBwP3J8dwFE43Q93Jx41yjxK41NRNaUflL8xL3Aj4CNIJ0YUQwlpIutIzOJq7rXWkneRI6tmgr3jsCarFtjwETph7-spg-WQAHXRQxt7hwMyxcNkJprEc13q6zGO_ycx9ei_hjjliXo0O8JMuQsL0rlm2zXrWOpRer5U77Hj33dnVSGrjvlD3X_5NsI0dlzG2MmKMFZHM0_PVbYFnSvWcEmLl_04_u5CJPtPfp9Pu6RTjy1lMOZtsHgBxqDC-oXxm0UP2Tcn2qlu_UDfIPhiL3r-QrwWFy7b3WpxJCcXwcm07pfUzijQ77A
Просто используйте токен для входа по адресу https://10.10.45.192:30001/.
https://my.oschina.net/u/2539854/blog/3023384 https://juejin.im/post/5d089f49f265da1baa1e7611