Эта статья участвовала в приказе о созыве Haowen, нажмите, чтобы просмотреть:Заявки на бэк-энд и фронт-энд с двумя треками, призовой фонд в 20 000 юаней ждет вас, чтобы бросить вызов!
предыдущий пост«Установка Kubernetes (часть 1): развертывание локальной среды на основе Minikube»Представлено на основе местных условийKubernetes
Целью установки является создание локальной среды разработки. Но в реальной производственной средеKubernetes
Среда намного сложнее, чем эта, по крайней мере, она начинается с кластера, поэтому эта статья начнется с производственной среды и представит вам производственную среду.Kubernetes
Развертывание кластера, чтобы вы действительно знали, как развернуть реальныйKubernetes
кластерная среда.
1. Подготовка окружающей среды
Установите кластер Kubernetes с помощью виртуальной машины VMware.Среда подготовки выглядит следующим образом:
- 2 виртуальные машины: CentOS 7, чем выше конфигурация, тем лучше!
- Версия докера: 19.03.13
- версия kubeadm: V1.20.0
2. Инициализация системы
Перед установкой некоторые системные параметры и конфигурации необходимо настроить единообразно, чтобы обеспечить бесперебойную работу последующих установок.
Часть инициализации системы должна быть выполнена на узлах Master и Node.
2.1 Установите системное имя хоста
hostnamectl set-hostname <hostname>
Процесс реализации:
- Главный узел
[root@localhost xcbeyond]# hostnamectl set-hostname k8s-master
- Узел узла:
[root@localhost xcbeyond]# hostnamectl set-hostname k8s-node01
2.2 Изменить хост-файл
Чтобы облегчить связь между узлами в кластере напрямую через имя хоста, рекомендуется изменить файл хоста.
Измените файл хоста на узлах Master и Node соответственно./etc/hosts
, добавьте следующее:
192.168.11.100 k8s-master
192.168.11.101 k8s-node01
Приведенный выше IP-адрес является фактическим IP-адресом соответствующего узла.
2.3 Установите пакеты зависимостей
В следующем процессе использования Kubernetes могут быть задействованы некоторые инструменты, которые устанавливаются заранее для последующего использования.
yum install -y conntrack ntpdate ntp ipvsadm ipset jq iptables curl sysstat libseccomp net-tools
2.4 Установите брандмауэр на Iptables и установите пустые правила
systemctl stop firewalld && systemctl disable firewalld
yum -y install iptables-services && systemctl start iptables && systemctl enable iptables&& iptables -F && service iptables save
2.5 Закрыть SELINUX
swapoff -a && sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 将SELinux禁用
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
2.6 Настройка параметров ядра
cat > kubernetes.conf <<EOF
net.bridge.bridge-nf-call-iptables=1 # 节点上的iptables能够正确地查看桥接流量
net.bridge.bridge-nf-call-ip6tables=1 # 节点上的iptables能够正确地查看桥接流量
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0 # 禁止使用 swap 空间,只有当系统 OOM 时才允许使用它
vm.overcommit_memory=1 # 不检查物理内存是否够用
vm.panic_on_oom=0 # 开启 OOM
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
cp kubernetes.conf /etc/sysctl.d/kubernetes.conf
sysctl -p /etc/sysctl.d/kubernetes.conf
2.7 Настройка часового пояса
(Если часовой пояс правильный, корректировка не требуется)
# 设置系统时区为中国/上海
timedatectl set-timezone Asia/Shanghai
# 将当前的 UTC 时间写入硬件时钟
timedatectl set-local-rtc 0
# 重启依赖于系统时间的服务
systemctl restart rsyslog
systemctl restart crond
2.8 Обновите ядро системы до версии 5.4
В ядре 3.10.x, которое поставляется с системой CentOS 7.x, есть некоторые ошибки, которые делают работу Docker и Kubernetes нестабильной, например: rpm -UvhWoohoo. El repo.org/El repo - жарко...
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
# 安装完成后检查/boot/grub2/grub.cfg中对应内核menuentry中是否包含initrd16配置,如果没有,再安装一次!
yum --enablerepo=elrepo-kernel install -y kernel-lt
# 设置开机从新内核启动
grub2-set-default 'CentOS Linux (5.4.93-1.el7.elrepo.x86_64) 7 (Core)'
Процесс реализации:
[root@k8s-master xcbeyond]# uname -r
3.10.0-1127.19.1.el7.x86_64
[root@k8s-master xcbeyond]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
获取http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
警告:/var/tmp/rpm-tmp.xF145X: 头V4 DSA/SHA1 Signature, 密钥 ID baadae52: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:elrepo-release-7.0-3.el7.elrepo ################################# [100%]
[root@k8s-master xcbeyond]# yum --enablerepo=elrepo-kernel install -y kernel-lt
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
……
警告:RPM 数据库已被非 yum 程序修改。
正在安装 : kernel-lt-5.4.93-1.el7.elrepo.x86_64 1/1
验证中 : kernel-lt-5.4.93-1.el7.elrepo.x86_64 1/1
已安装:
kernel-lt.x86_64 0:5.4.93-1.el7.elrepo
完毕!
[root@k8s-master xcbeyond]# grub2-set-default 'CentOS Linux (5.4.93-1.el7.elrepo.x86_64) 7 (Core)'
[root@k8s-master xcbeyond]# reboot
После завершения перезагрузки убедитесь, что ядро системы было успешно обновлено:
[xcbeyond@k8s-master ~]$ uname -r
5.4.93-1.el7.elrepo.x86_64
Не забудьте выполнить его на узле узла!
2.9 Предварительные условия для kube-proxy для включения ipvs
modprobe br_netfilter
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
Процесс реализации:
[root@k8s-master xcbeyond]# modprobe br_netfilter
[root@k8s-master xcbeyond]# cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> #!/bin/bash
> modprobe -- ip_vs
> modprobe -- ip_vs_rr
> modprobe -- ip_vs_wrr
> modprobe -- ip_vs_sh
> modprobe -- nf_conntrack_ipv4
> EOF
[root@k8s-master xcbeyond]# chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
modprobe: FATAL: Module nf_conntrack_ipv4 not found.
Не забудьте выполнить его на узле узла!
3. Установка докера
Процесс установки Docker здесь описываться не будет, подробности можно найти в ранее написанных статьях.
4. Установкаkubeadm
4.1 Установкаkubeadm
,kubectl
а такжеkubelet
На каждую машину (главную, ноду) необходимо установить следующие пакеты:
-
kubeadm
: Инструкции, используемые для инициализации кластера. -
kubectl
: Инструмент командной строки, используемый для связи с кластером. -
kubelet
: используется на каждом узле в кластере для запуска подов, контейнеров и т. д.
(1) Настройте источник данных Kubernetes
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
Процесс реализации:
[root@k8s-master xcbeyond]# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
> [kubernetes]
> name=Kubernetes
> baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
> enabled=1
> gpgcheck=0
> repo_gpgcheck=0
> gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
> http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
> EOF
(2) Установкаkubeadm
,kubectl
,kubelet
yum -y install kubeadm kubectl kubelet
Процесс реализации:
[root@k8s-master xcbeyond]# yum -y install kubeadm kubectl kubelet
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.neusoft.edu.cn
* elrepo: mirrors.neusoft.edu.cn
* extras: mirrors.neusoft.edu.cn
* updates: mirrors.neusoft.edu.cn
kubernetes | 1.4 kB 00:00:00
正在解决依赖关系
--> 正在检查事务
---> 软件包 kubeadm.x86_64.0.1.20.2-0 将被 安装
--> 正在处理依赖关系 kubernetes-cni >= 0.8.6,它被软件包 kubeadm-1.20.2-0.x86_64 需要
--> 正在处理依赖关系 cri-tools >= 1.13.0,它被软件包 kubeadm-1.20.2-0.x86_64 需要
---> 软件包 kubectl.x86_64.0.1.20.2-0 将被 安装
---> 软件包 kubelet.x86_64.0.1.20.2-0 将被 安装
--> 正在处理依赖关系 socat,它被软件包 kubelet-1.20.2-0.x86_64 需要
--> 正在检查事务
---> 软件包 cri-tools.x86_64.0.1.13.0-0 将被 安装
---> 软件包 kubernetes-cni.x86_64.0.0.8.7-0 将被 安装
---> 软件包 socat.x86_64.0.1.7.3.2-2.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
=========================================================================================
Package 架构 版本 源 大小
=========================================================================================
正在安装:
kubeadm x86_64 1.20.2-0 kubernetes 8.3 M
kubectl x86_64 1.20.2-0 kubernetes 8.5 M
kubelet x86_64 1.20.2-0 kubernetes 20 M
为依赖而安装:
cri-tools x86_64 1.13.0-0 kubernetes 5.1 M
kubernetes-cni x86_64 0.8.7-0 kubernetes 19 M
socat x86_64 1.7.3.2-2.el7 base 290 k
事务概要
=========================================================================================
安装 3 软件包 (+3 依赖软件包)
总计:61 M
总下载量:52 M
安装大小:262 M
Downloading packages:
(1/5): 14bfe6e75a9efc8eca3f638eb22c7e2ce759c67f95b43b16fae4ebabde1549f3-cri-tools-1.13.0-0.x86_64.rpm | 5.1 MB 00:00:03
(2/5): b46459afb07aaf12937f7f310b876fab9f5f904eaa8f4a88a21547477eafba78-kubeadm-1.20.2-0.x86_64.rpm | 8.3 MB 00:00:06
(3/5): socat-1.7.3.2-2.el7.x86_64.rpm | 290 kB 00:00:02
(4/5): a79d632b1f8c40d2a00e2f98cba68b55c3928d70b97c32aad61c10e17965c2f1-kubelet-1.20.2-0.x86_64.rpm | 20 MB 00:00:14
(5/5): db7cb5cb0b3f6875f54d10f02e625573988e3e91fd4fc5eef0b1876bb18604ad-kubernetes-cni-0.8.7-0.x86_64.rpm | 19 MB 00:00:11
-----------------------------------------------------------------------------------------
总计 2.8 MB/s | 52 MB 00:00:18
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : socat-1.7.3.2-2.el7.x86_64 1/6
正在安装 : kubelet-1.20.2-0.x86_64 2/6
正在安装 : kubernetes-cni-0.8.7-0.x86_64 3/6
正在安装 : kubectl-1.20.2-0.x86_64 4/6
正在安装 : cri-tools-1.13.0-0.x86_64 5/6
正在安装 : kubeadm-1.20.2-0.x86_64 6/6
验证中 : kubernetes-cni-0.8.7-0.x86_64 1/6
验证中 : kubelet-1.20.2-0.x86_64 2/6
验证中 : kubeadm-1.20.2-0.x86_64 3/6
验证中 : cri-tools-1.13.0-0.x86_64 4/6
验证中 : kubectl-1.20.2-0.x86_64 5/6
验证中 : socat-1.7.3.2-2.el7.x86_64 6/6
已安装:
kubeadm.x86_64 0:1.20.2-0 kubectl.x86_64 0:1.20.2-0 kubelet.x86_64 0:1.20.2-0
作为依赖被安装:
cri-tools.x86_64 0:1.13.0-0 kubernetes-cni.x86_64 0:0.8.7-0 socat.x86_64 0:1.7.3.2-2.el7
完毕!
(3) Установите загрузку для запускаkubelet
systemctl enable kubelet.service
Процесс реализации:
[root@k8s-master xcbeyond]# systemctl enable kubelet.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kubelet.service to /usr/lib/systemd/system/kubelet.service.
Не забудьте выполнить его на узле узла!
4.2 Создание кластера
4.2.1 Загрузка установочного образа
kubeadm
Репозиторий образов Docker по умолчанию, используемый для создания кластера,k8s.gcr.io
, а внутренний не может быть напрямую доступен, и его необходимо передать для использования.
(Требуемая сборка образа была опубликована на Docker Hub для прямого внутреннего использования)
Должны быть выполнены как мастер-узлы, так и ноды!
Установить скрипт извлечения образаk8s-images-pull.shследующим образом:
#!/bin/bash
kubernetes_version="v1.20.0"
# 下载需要的镜像(docker hub)
kubeadm config images list --kubernetes-version=${kubernetes_version} |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#xcbeyond#g' |sh -x
# 重命名镜像
docker images |grep xcbeyond |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's#xcbeyond#k8s.gcr.io#2' |sh -x
# 删除xcbeyond镜像
docker images |grep xcbeyond |awk '{print "docker rmi ", $1":"$2}' |sh -x
Посмотрите, какие изображения необходимы:
kubeadm config images list
Процесс выполнения следующий:
[root@k8s-master xcbeyond]# ./k8s-images-pull.sh
+ docker pull xcbeyond/kube-apiserver:v1.20.0
v1.20.0: Pulling from xcbeyond/kube-apiserver
f398b465657e: Pull complete
cbcdf8ef32b4: Pull complete
a9b56b1d4e55: Pull complete
Digest: sha256:c54e33e290aa1463eae80f6bd4440af3def87f01f86a37a12ec213eb205e538a
Status: Downloaded newer image for xcbeyond/kube-apiserver:v1.20.0
docker.io/xcbeyond/kube-apiserver:v1.20.0
+ docker pull xcbeyond/kube-controller-manager:v1.20.0
v1.20.0: Pulling from xcbeyond/kube-controller-manager
f398b465657e: Already exists
cbcdf8ef32b4: Already exists
2ffb969cde54: Pull complete
Digest: sha256:5f6321aaa0d9880bd3a96a0d589fc96e912e30f7f5f6d6f53c406eb2b4b20b68
Status: Downloaded newer image for xcbeyond/kube-controller-manager:v1.20.0
docker.io/xcbeyond/kube-controller-manager:v1.20.0
+ docker pull xcbeyond/kube-scheduler:v1.20.0
v1.20.0: Pulling from xcbeyond/kube-scheduler
f398b465657e: Already exists
cbcdf8ef32b4: Already exists
2f71710e6dc2: Pull complete
Digest: sha256:10f3ae3ed09f92b3be037e1dd465214046135eabd9879db43b3fe7159a1bae1c
Status: Downloaded newer image for xcbeyond/kube-scheduler:v1.20.0
docker.io/xcbeyond/kube-scheduler:v1.20.0
+ docker pull xcbeyond/kube-proxy:v1.20.0
v1.20.0: Pulling from xcbeyond/kube-proxy
e5a8c1ed6cf1: Pull complete
f275df365c13: Pull complete
6a2802bb94f4: Pull complete
cb3853c52da4: Pull complete
db342cbe4b1c: Pull complete
9a72dd095a53: Pull complete
6943e8f5bc84: Pull complete
Digest: sha256:d583d644b186519597dfdfe420710ab0888927e286ea43b2a6f54ba4329e93e4
Status: Downloaded newer image for xcbeyond/kube-proxy:v1.20.0
docker.io/xcbeyond/kube-proxy:v1.20.0
+ docker pull xcbeyond/pause:3.2
3.2: Pulling from xcbeyond/pause
c74f8866df09: Pull complete
Digest: sha256:4dcd2075946239537e21adcf4bb300f07eb5c2c8058d699480f2ae62a5cc5085
Status: Downloaded newer image for xcbeyond/pause:3.2
docker.io/xcbeyond/pause:3.2
+ docker pull xcbeyond/etcd:3.4.13-0
3.4.13-0: Pulling from xcbeyond/etcd
4000adbbc3eb: Already exists
d72167780652: Already exists
d60490a768b5: Already exists
4a4b5535d134: Pull complete
0dac37e8b31a: Pull complete
Digest: sha256:79d32edd429163b1ae404eeb078c75fc2f63fc3d606e0cd57285c832e8181ea3
Status: Downloaded newer image for xcbeyond/etcd:3.4.13-0
docker.io/xcbeyond/etcd:3.4.13-0
+ docker pull xcbeyond/coredns:1.7.0
1.7.0: Pulling from xcbeyond/coredns
c6568d217a00: Pull complete
6937ebe10f02: Pull complete
Digest: sha256:4310e3ed7a0a9b82cfb2d31c6a7c102b8d05fef2b0208072b87dc4ceca3c47bb
Status: Downloaded newer image for xcbeyond/coredns:1.7.0
docker.io/xcbeyond/coredns:1.7.0
+ docker tag xcbeyond/pause:3.2 k8s.gcr.io/pause:3.2
+ docker tag xcbeyond/kube-controller-manager:v1.20.0 k8s.gcr.io/kube-controller-manager:v1.20.0
+ docker tag xcbeyond/coredns:1.7.0 k8s.gcr.io/coredns:1.7.0
+ docker tag xcbeyond/etcd:3.4.13-0 k8s.gcr.io/etcd:3.4.13-0
+ docker tag xcbeyond/kube-proxy:v1.20.0 k8s.gcr.io/kube-proxy:v1.20.0
+ docker tag xcbeyond/kube-scheduler:v1.20.0 k8s.gcr.io/kube-scheduler:v1.20.0
+ docker tag xcbeyond/kube-apiserver:v1.20.0 k8s.gcr.io/kube-apiserver:v1.20.0
+ docker rmi xcbeyond/pause:3.2
Untagged: xcbeyond/pause:3.2
Untagged: xcbeyond/pause@sha256:4dcd2075946239537e21adcf4bb300f07eb5c2c8058d699480f2ae62a5cc5085
+ docker rmi xcbeyond/kube-controller-manager:v1.20.0
Untagged: xcbeyond/kube-controller-manager:v1.20.0
Untagged: xcbeyond/kube-controller-manager@sha256:5f6321aaa0d9880bd3a96a0d589fc96e912e30f7f5f6d6f53c406eb2b4b20b68
+ docker rmi xcbeyond/coredns:1.7.0
Untagged: xcbeyond/coredns:1.7.0
Untagged: xcbeyond/coredns@sha256:4310e3ed7a0a9b82cfb2d31c6a7c102b8d05fef2b0208072b87dc4ceca3c47bb
+ docker rmi xcbeyond/etcd:3.4.13-0
Untagged: xcbeyond/etcd:3.4.13-0
Untagged: xcbeyond/etcd@sha256:79d32edd429163b1ae404eeb078c75fc2f63fc3d606e0cd57285c832e8181ea3
+ docker rmi xcbeyond/kube-proxy:v1.20.0
Untagged: xcbeyond/kube-proxy:v1.20.0
Untagged: xcbeyond/kube-proxy@sha256:d583d644b186519597dfdfe420710ab0888927e286ea43b2a6f54ba4329e93e4
+ docker rmi xcbeyond/kube-scheduler:v1.20.0
Untagged: xcbeyond/kube-scheduler:v1.20.0
Untagged: xcbeyond/kube-scheduler@sha256:10f3ae3ed09f92b3be037e1dd465214046135eabd9879db43b3fe7159a1bae1c
+ docker rmi xcbeyond/kube-apiserver:v1.20.0
Untagged: xcbeyond/kube-apiserver:v1.20.0
Untagged: xcbeyond/kube-apiserver@sha256:c54e33e290aa1463eae80f6bd4440af3def87f01f86a37a12ec213eb205e538a
[root@k8s-master xcbeyond]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/pause 3.2 b76329639608 16 hours ago 683kB
k8s.gcr.io/kube-controller-manager v1.20.0 630f45a9961f 16 hours ago 116MB
k8s.gcr.io/coredns 1.7.0 4e42ad8cda50 21 hours ago 45.2MB
k8s.gcr.io/etcd 3.4.13-0 999b6137af27 21 hours ago 253MB
k8s.gcr.io/kube-proxy v1.20.0 51912faaf3a3 21 hours ago 118MB
k8s.gcr.io/kube-scheduler v1.20.0 62181d1bf9a1 21 hours ago 46.4MB
k8s.gcr.io/kube-apiserver v1.20.0 0f7e1178e374 22 hours ago 122MB
Не забудьте выполнить его на узле узла!
4.2.2 Инициализация главного узла
Master
узел относится кKubernetes
Узлы управления в кластере, в том числеetcd
(кластерная база данных) иAPI Server
(входной процесс контролируется кластером).
Инициализируйте мастер-узел, выполнитеkubeadm init <args>
.
(1) Модификацияkubeadm
Инициализируйте файл конфигурации.
Выполните команду ``kubeadm config print init-defaults命令获取
Шаблон исходного файла конфигурации kubeadm`, который хранится в kubeadm-config.yml:
kubeadm config print init-defaults > kubeadm-config.yml
и измените следующие параметры:
localAPIEndpoint:
advertiseAddress: 192.168.66.10 # 主节点实际IP
kubernetesVersion: v1.20.0
networking:
podSubnet: "10.244.0.0/16" #
serviceSubnet: 10.96.0.0/12
# 新增如下内容:
---
apiVersion: kubeproxy.config.k8s.io/v1alpha1
kind: KubeProxyConfiguration
featureGates:
SupportIPVSProxyMode: true
mode: ipvs
kubeadm init --config=kubeadm-config.yml --upload-certs | tee kubeadm-init.log
(2) Инициализация.
kubeadm init --config=kubeadm-config.yml | tee kubeadm-init.log
Журнал инициализации удобно просматривать и хранить в файле kubeadm-init.log.
Если определенное исполнение
kubeadm init
Инициализация не удалась, при следующем выполненииkubeadm init
Перед оператором инициализации выполнитеkubeadm reset
Заказ. Функция этой команды состоит в сбросе узла.Эта команда может быть понята как: последний разkubeadm init
Операция инициализации не удалась, эта команда очищает предыдущую неудачную среду.
Процесс реализации:
[root@k8s-master xcbeyond]# kubeadm init --config=kubeadm-config.yml | tee kubeadm-init.log
[init] Using Kubernetes version: v1.20.0
[preflight] Running pre-flight checks
[preflight] Pulling images required for setting up a Kubernetes cluster
[preflight] This might take a minute or two, depending on the speed of your internet connection
[preflight] You can also perform this action in beforehand using 'kubeadm config images pull'
[certs] Using certificateDir folder "/etc/kubernetes/pki"
[certs] Generating "ca" certificate and key
[certs] Generating "apiserver" certificate and key
[certs] apiserver serving cert is signed for DNS names [k8s-master kubernetes kubernetes.default kubernetes.default.svc kubernetes.default.svc.cluster.local] and IPs [10.96.0.1 192.168.11.100]
[certs] Generating "apiserver-kubelet-client" certificate and key
[certs] Generating "front-proxy-ca" certificate and key
[certs] Generating "front-proxy-client" certificate and key
[certs] Generating "etcd/ca" certificate and key
[certs] Generating "etcd/server" certificate and key
[certs] etcd/server serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.11.100 127.0.0.1 ::1]
[certs] Generating "etcd/peer" certificate and key
[certs] etcd/peer serving cert is signed for DNS names [k8s-master localhost] and IPs [192.168.11.100 127.0.0.1 ::1]
[certs] Generating "etcd/healthcheck-client" certificate and key
[certs] Generating "apiserver-etcd-client" certificate and key
[certs] Generating "sa" key and public key
[kubeconfig] Using kubeconfig folder "/etc/kubernetes"
[kubeconfig] Writing "admin.conf" kubeconfig file
[kubeconfig] Writing "kubelet.conf" kubeconfig file
[kubeconfig] Writing "controller-manager.conf" kubeconfig file
[kubeconfig] Writing "scheduler.conf" kubeconfig file
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Starting the kubelet
[control-plane] Using manifest folder "/etc/kubernetes/manifests"
[control-plane] Creating static Pod manifest for "kube-apiserver"
[control-plane] Creating static Pod manifest for "kube-controller-manager"
[control-plane] Creating static Pod manifest for "kube-scheduler"
[etcd] Creating static Pod manifest for local etcd in "/etc/kubernetes/manifests"
[wait-control-plane] Waiting for the kubelet to boot up the control plane as static Pods from directory "/etc/kubernetes/manifests". This can take up to 4m0s
[apiclient] All control plane components are healthy after 28.009413 seconds
[upload-config] Storing the configuration used in ConfigMap "kubeadm-config" in the "kube-system" Namespace
[kubelet] Creating a ConfigMap "kubelet-config-1.20" in namespace kube-system with the configuration for the kubelets in the cluster
[upload-certs] Skipping phase. Please see --upload-certs
[mark-control-plane] Marking the node k8s-master as control-plane by adding the labels "node-role.kubernetes.io/master=''" and "node-role.kubernetes.io/control-plane='' (deprecated)"
[mark-control-plane] Marking the node k8s-master as control-plane by adding the taints [node-role.kubernetes.io/master:NoSchedule]
[bootstrap-token] Using token: abcdef.0123456789abcdef
[bootstrap-token] Configuring bootstrap tokens, cluster-info ConfigMap, RBAC Roles
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to get nodes
[bootstrap-token] configured RBAC rules to allow Node Bootstrap tokens to post CSRs in order for nodes to get long term certificate credentials
[bootstrap-token] configured RBAC rules to allow the csrapprover controller automatically approve CSRs from a Node Bootstrap Token
[bootstrap-token] configured RBAC rules to allow certificate rotation for all node client certificates in the cluster
[bootstrap-token] Creating the "cluster-info" ConfigMap in the "kube-public" namespace
[kubelet-finalize] Updating "/etc/kubernetes/kubelet.conf" to point to a rotatable kubelet client certificate and key
[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy
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
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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 192.168.11.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:79f34a5872b3df5817d29330ec055d14509a66c96c5de01bfa0d640fab671d90
4.2.3 Присоединение к главному узлу
на Главном узлеkubeadm init
После успешного выполнения обратите внимание на подсказки в конце журнала и при необходимости выполните соответствующие команды на узлах Master и Node.
kubeadm init
Журнал выполнения инициализации выглядит следующим образом:
……
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
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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 192.168.11.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:79f34a5872b3df5817d29330ec055d14509a66c96c5de01bfa0d640fab671d90
Чтобы разрешить пользователям без полномочий root запускатьkubectl
, выполните следующую команду (даkubeadm init
часть выходного журнала):
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
или если выroot
пользователь, вы можете запустить:
export KUBECONFIG=/etc/kubernetes/admin.conf
4.2.4 Присоединение к рабочему узлу
Рабочие узлы — это место, где выполняются ваши рабочие нагрузки (контейнеры, модули и т. д.). Чтобы добавить новые узлы в кластер, выполните следующие действия для каждого рабочего узла.
пользователь root выполняетkubeadm init
Выходная команда:
kubeadm join 192.168.11.100:6443 --token abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:79f34a5872b3df5817d29330ec055d14509a66c96c5de01bfa0d640fab671d90
Процесс реализации:
[root@k8s-node01 xcbeyond]# kubeadm join 192.168.11.100:6443 --token abcdef.0123456789abcdef \
> --discovery-token-ca-cert-hash sha256:79f34a5872b3df5817d29330ec055d14509a66c96c5de01bfa0d640fab671d90
[preflight] Running pre-flight checks
[preflight] Reading configuration from the cluster...
[preflight] FYI: You can look at this config file with 'kubectl -n kube-system get cm kubeadm-config -o yaml'
[kubelet-start] Writing kubelet configuration to file "/var/lib/kubelet/config.yaml"
[kubelet-start] Writing kubelet environment file with flags to file "/var/lib/kubelet/kubeadm-flags.env"
[kubelet-start] Starting the kubelet
[kubelet-start] Waiting for the kubelet to perform the TLS Bootstrap...
This node has joined the cluster:
* Certificate signing request was sent to apiserver and a response was received.
* The Kubelet was informed of the new secure connection details.
Run 'kubectl get nodes' on the control-plane to see this node join the cluster.
4.2.5 Установка дополнения Pod Network
На этом этапе выполните на главном узлеkubectl get nodes
Заказ:
[root@k8s-master xcbeyond]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master NotReady control-plane,master 1m8s v1.20.2
k8s-node01 NotReady <none> 18s v1.20.2
найдено, чтоNotReady
Статус, потому что Kubernetes требует, чтобы сеть существовала, то есть сетевая надстройка Pod еще не была создана, а сетевая надстройка Pod должна быть установлена в это время.
Вы можете напрямую использовать официальный файл kube-flannel.yml для его создания.
(1) Загрузите официальный файл kube-flannel.yml.
Адрес файла:GitHub.com/основная ОС/флуд…
(2) Создайте сеть.
[root@k8s-master xcbeyond]# kubectl create -f kube-flannel.yml
podsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds created
(3) Просмотр модуля.
Если фланель не
Running
статус, вы можете подождать некоторое время и дождаться успешного завершения сборки.
[root@k8s-master xcbeyond]# kubectl get pod -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-fr4jj 0/1 ContainerCreating 0 6m3s
coredns-74ff55c5b-wcj2h 0/1 ContainerCreating 0 6m3s
etcd-k8s-master 1/1 Running 0 6m5s
kube-apiserver-k8s-master 1/1 Running 0 6m5s
kube-controller-manager-k8s-master 1/1 Running 0 6m5s
kube-flannel-ds-2nkcv 1/1 Running 0 13s
kube-flannel-ds-m8tf2 1/1 Running 0 13s
kube-proxy-mft9t 0/1 CrashLoopBackOff 6 6m3s
kube-proxy-n67px 0/1 CrashLoopBackOff 3 68s
kube-scheduler-k8s-master 1/1 Running 0 6m5s
(4) Просмотр состояния узла.
ужеReady
условие.
[root@k8s-master xcbeyond]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane,master 6m30s v1.20.2
k8s-node01 Ready <none> 85s v1.20.2
4.3 Проверка среды кластера
Пока на основеkubeadm
Построение кластера режима завершено, давайте приступим к изучению Kubernetes в кластерной среде Kubernetes!
5. Резюме
В процессе установки вы можете столкнуться с различными проблемами и препятствиями, так что не переживайте, первоначальная установка точно будет такой.
Столкнувшись с проблемой, существуют следующие взгляды или предложения:
- Когда вы сталкиваетесь с проблемой, это означает, что вы сделали это сами, что само по себе является удовольствием. (Вот как яма вышла)
- Не паникуйте, внимательно проверьте журнал ошибок и подсказки.
- В зависимости от ключевого сообщения об ошибке сходятся различные поиски, особенно на официальном сайте или github.
- После решения проблемы, на запись.
Справочная статья: