kubernetes — это открытый исходный код для управления контейнерными приложениями на нескольких узлах облачной платформы. Цель Kubernetes — сделать развертывание контейнерных приложений простым и эффективным. Kubernetes обеспечивает механизм развертывания, планирования, обновления и обслуживания приложений.
У Kubernetes есть множество методов установки, например, сложный бинарный метод установки.В этой статье в основном объясняется, как использовать Kubeadm для установки кластера Kubernetes.
первоначальная подготовительная работа
система | Роль | IP | Имя процессора | Память (выше 2G) |
---|---|---|---|---|
Centos 7 | master | 192.168.60.11 | k8s-master-11.cn | 2G |
Centos 7 | node | 192.168.60.16 | k8s-node-16.cn | 2G |
Centos 7 | node | 192.168.60.170 | k8s-node-170.cn | 2G |
В этой статье создается только кластер Kubernetes, а не кластер высокой доступности Kubernetes.Для кластера высокой доступности требуется несколько главных узлов, чтобы избежать возможного простоя службы на главном узле. На всех серверах необходимо выполнить следующие предварительные приготовления. Поскольку операционная система, используемая в этой статье, — Centos, где вы являетесь пользователем Ubuntu, проверьтеОфициальная конкретная операция.
Если вы изменяете имя хоста сервера в соответствии с информацией в таблице, измените конкретное имя хоста в соответствии с вашим фактическим именем. Следует отметить, что имя хоста каждого сервера должно быть уникальным.
# 修改主机名
hostnamectl set-hostname k8s-master-11.cn
# 查看主机名
hostname
на каждый сервер/etc/hosts
Добавьте конфигурацию в файл. Поскольку есть только три сервера, мы напрямую изменяем файл hosts, чтобы указать.Если это большой кластер, каждый раз, когда добавляется узел, файл hosts каждого сервера должен быть изменен, что будет очень хлопотно, поэтому вы можете выбрать использовать DNS для разрешения, но у нас здесь всего несколько серверов, просто измените файл hosts напрямую.
192.168.60. k8s-master-252.cn
192.168.60.227 k8s-node-227.cn
192.168.60.15 k8s-node-15.cn
отключить брандмауэр
# 停止
systemctl stop firewalld.service
# 禁用
systemctl disable firewalld.service
# 查看防火墙状态
firewall-cmd --state
Отключите пространство подкачки сервера
swapoff -a
sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab
# 查看交换free
free -m
установить докер,Официальный веб-сайт Kubernetes Учебное пособие.
# 如果已经安装,需要卸载的话,使用以下命令
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装依赖包
yum install yum-utils device-mapper-persistent-data lvm2
# 设置稳定的仓库
yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# Install Docker CE.
yum update && yum install \
containerd.io-1.2.10 \
docker-ce-19.03.4 \
docker-ce-cli-19.03.4
# 配置docker 加速器:
mkdir /etc/docker
## 粘贴内容
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
mkdir -p /etc/systemd/system/docker.service.d
# 重启docker
systemctl daemon-reload
systemctl restart docker
Уведомление:После изменения файла конфигурации не забудьте перезапустить Docker.
закрыть SElinux
# 关闭
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
# 查看状态
getenforce
Синхронизируйте время сервера и установите часовой пояс Шанхая.Если вы являетесь пользователем Ubuntu, узнайте на Baidu, как установить и обновить время сервера.
# 同步时间
yum install -y ntpdate
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 检查服务器时间是否同步
date
Пользователям Centos7 также необходимо настроить маршрутизацию
yum install -y bridge-utils.x86_64
modprobe br_netfilter
Цепь для передачи мостового трафика IPv4 в iptables
vi /etc/sysctl.d/kubernetes.conf
# 粘贴内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 刷新
sudo sysctl --system
Установить адрес загрузки kubeadm
vi /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
скачать kubelet kubeadm kubectl
yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
# 设置开机启动
systemctl enable --now kubelet
На этом подготовка на каждом сервере в основном завершена. В следующем разделе объясняется, как использовать kubeadm для инициализации кластера kubernetes.
Kubeadm инициализирует кластер Kubernetes
Примечание. Запустите следующую команду на сервере выбранного нами главного узла.
Здесь я использую файл конфигурации для инициализации кластера.Если вы хотите использовать команду напрямую, проверьте документ с конкретными параметрами на официальном сайте.Официальный адрес сайта параметров инициализации kubeadm
# 生产配置文件
kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.yml
Просмотрите файл kubeadm.yml и измените следующие примечания. Основными модификациями являются IP мастер-ноды, адрес зеркала, здесь мы используем внутреннее хранилище зеркал, и сегмент сети, где находится Pod, если сегмент сети кластера, где находится ваш сервер, несовместим.192.168.0.0/16
В случае конфликта вам не нужно изменять адрес этого сегмента сети, просто используйте значение по умолчанию. Примечание. Если адрес сетевого сегмента изменен, его необходимо изменить в сетевом подключаемом модуле calico.CALICO_IPV4POOL_CIDR
Измените значение по умолчанию на значение сегмента сети, которое вы изменили. Тут столкнулся с ямой.Мой серверный сегмент сети находится в сегменте сети 192.169.0.0.В начале,когда дефолт не модифицировали,всегда была проблема при установке калико. Позже я проверил документ на официальном веб-сайте calico и обнаружил, что сегмент сети kubernetes по умолчанию необходимо изменить, но я забыл изменить значение по умолчанию в calico, а затем возникла проблема, что IP-адрес сервера кластера не может быть пингуется в Pod.
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: abcdef.0123456789abcdef
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
#修改为主节点IP
advertiseAddress: 192.168.60.11
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: k8s-master-1
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
#修改镜像仓库
imageRepository: registry.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.17.0
networking:
# 配置 pod 所在网段和虚拟机所在网段不重复(这里用的是Flannel 默认网段),如果宿主机已经使用该网段,则必须更改网段
podSubnet: 10.244.0.0/16
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
scheduler: {}
# 查看需要下载镜像
kubeadm config images list --config kubeadm.yml
# 步骤一:拉取镜像
kubeadm config images pull --config kubeadm.yml
# 步骤二:初始化k8s
kubeadm init --config=kubeadm.yml --upload-certs | tee kubeadm-init.log
# 或者使用参数直接初始化master节点
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=192.168.60.237
--upload-certs
После успешного выполнения появится информация на рисунке выше: вам нужно выполнить первую обведенную команду на главном узле, чтобы вы могли использовать команду kubectl на главном узле; вторая обведенная команда требует, чтобы вы были на узел node Выполните операцию на узле, чтобы присоединиться к главному узлу.
После добавления узла узла к главному узлу используйте kubectl get nodes для просмотра узла, вы обнаружите, что есть три сервера, как показано на рисунке ниже, но в это время статус не готов, а не готов (PS : из-за этого скриншота моего) Именно по скриншоту после завершения) значит сеть между кластерами не интероперабельна, и надо установить сетевой плагин.После установки сетевого плагина, появится следующая информация.
Уведомление:Поэтому Kubernetes выполняет операции на главном узле, а узел узла в основном запускает различные поды.
Установите сетевой плагин Calico
# 安装Calico
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 查看是否安装完成
watch kubectl get pods --all-namespaces
Уведомление:Если сегмент сети по умолчанию для хоста по умолчанию — 192.168.0.0/16, вам необходимо изменить сегмент сети.Подробности см. в шагах по инициализации главного узла kubeadm. Если адрес сетевого сегмента модуля Kubernetes изменен, его необходимо изменить в файле calico.yaml.CALICO_IPV4POOL_CIDR
Соответствующее значение, значение по умолчанию для этого значения192.168.0.0/16
, а затем измените его на измененное значение в kubeadm. Как показано ниже:
Добавить узел узел
Если вам нужно добавить новый узел, вам необходимо выполнить описанную выше подготовительную работу, а затем использовать следующую команду для получения токена и SHA256, а затем выполнить команду присоединения kubeadm на новом узле, чтобы присоединить новый узел к кластеру. , Для конкретных команд, пожалуйста, посмотрите вниз:
# 查看 Token
kubeadm token list
# 创建新的token
kubeadm token create
# 查看 Kubernetes认证的SHA256加密字符串
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
# 新Node节点使用命令加入,根据得到的token和SHA256替换
kubeadm join 192.168.60.252:6443 --token bq9xsp.bpf3zfl7mndpl9h2 \
--discovery-token-ca-cert-hash sha256:937e143e3bd79a24f1cdefd2693072484757beeb06869af07ba4962a78b4544d
#查看工作节点
kubectl get nodes
# 打印kubeadm join 命令
kubeadm token create --print-join-command