Kubernetes Notes (3) — Основные компоненты/аксессуары

задняя часть Kubernetes
Kubernetes Notes (3) — Основные компоненты/аксессуары

Это 6-й день моего участия в Gengwen Challenge.Подробности мероприятия смотрите:Обновить вызов

Развертывание трех кластеров

Чтобы легко испытать функции, вы можете сначала установить и протестировать kubeadm. Для производственной среды рекомендуются двоичные или некоторые зрелые методы установки с высокой доступностью кластера. Kubeadm — это официальный инструмент быстрого развертывания, предоставляемый K8S. Он предоставляет две команды: kubeadm init и kubeadm объединяются в качестве рекомендаций по быстрому созданию кластера kubernetes, в этой главе объясняется процесс развертывания кластера K8S с помощью kubeadm.

  • Кластерная организация
проект инструкция
размер кластера Мастер, узел1, узел2
система CentOS 7.3
Планирование сети ПОД: 10.244.0.0/16, служба: 10.96.0.0/12

3.1 Подготовка перед развертыванием

Все операции в этом разделе выполняются на всех узлах

3.1.1 Отключите firewalld и selinux

setenforce 0
sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config

systemctl stop firewalld
systemctl disable firewalld

3.1.2 Загрузка модуля ядра ipvs

  • Установите модуль IPVS
yum -y install ipvsadm ipset sysstat conntrack libseccomp
  • Установить профиль загрузки загрузки
cat >>/etc/modules-load.d/ipvs.conf<<EOF
ip_vs_dh
ip_vs_ftp
ip_vs
ip_vs_lblc
ip_vs_lblcr
ip_vs_lc
ip_vs_nq
ip_vs_pe_sip
ip_vs_rr
ip_vs_sed
ip_vs_sh
ip_vs_wlc
ip_vs_wrr
nf_conntrack_ipv4
EOF
  • Настройка загрузочного модуля IPVS
systemctl enable systemd-modules-load.service   # 设置开机加载内核模块
lsmod | grep -e ip_vs -e nf_conntrack_ipv4      # 重启后检查 ipvs 模块是否加载
  • Если кластер был развернут в режиме iptables, для его изменения можно использовать следующую команду: Измените режим на ipvs и перезапустите кластер.
kubectl edit -n kube-system configmap kube-proxy

3.1.3 Загрузка Docker и K8S

  • установить источник докера
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • установить источник k8s
cat >>/etc/yum.repos.d/kuberetes.repo<<EOF
[kuberneres]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
enabled=1
EOF
  • Устанавливаем docker-ce и kubernetes
yum install docker-ce kubelet kubectl kubeadm -y
systemctl start docker
systemctl enable docker
systemctl enable kubelet

3.1.4 Установка параметров ядра и K8S

  • установить параметры ядра
cat >>/etc/sysctl.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
  • Настройте kubelet на игнорирование свопа и использование ipvs
cat >/etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--fail-swap-on=false"
KUBE_PROXY_MODE=ipvs
EOF

3.2 Развернуть мастер

Все операции в этом разделе выполняются только на Главном узле.

3.2.1 Заранее вытяните изображение

Лучше всего, чтобы хост обращался к сторонним ресурсам.При инициализации kubeadm init он будет тянуть образ из докер-хаба Google.Если хост не может получить доступ к k8s.gcr.io для тестирования, он может быть на сервере, поэтому нам нужно для предварительного развертывания программного обеспечения прокси.В этом примере отслеживайте локальный 9666 для развертывания.

Если условия не позволяют, можно обратиться:blog.CSDN.net/Золотой поток света…решить проблему зеркалирования.

  • Настройте адрес прокси, когда Docker извлекает образ, vim /usr/lib/systemd/system/docker.service.
[Service]
Environment="HTTPS_PROXY=127.0.0.1:9666"
Environment="NO_PROXY=127.0.0.0/8,172.16.0.0/16"
  • Заранее загрузите образы, необходимые для инициализации
kubeadm config images pull
  • Используйте другие исходные зеркала
docker pull mirrorgooglecontainers/kube-apiserver:v1.14.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.14.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.14.2
docker pull mirrorgooglecontainers/kube-proxy:v1.14.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1


利用`kubeadm config images list` 查看需要的docker image name

k8s.gcr.io/kube-apiserver:v1.14.2
k8s.gcr.io/kube-controller-manager:v1.14.2
k8s.gcr.io/kube-scheduler:v1.14.2
k8s.gcr.io/kube-proxy:v1.14.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.3.10
k8s.gcr.io/coredns:1.3.1

# 修改tag

docker tag docker.io/mirrorgooglecontainers/kube-apiserver:v1.14.2 k8s.gcr.io/kube-apiserver:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-scheduler:v1.14.2 k8s.gcr.io/kube-scheduler:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-proxy:v1.14.2 k8s.gcr.io/kube-proxy:v1.14.2
docker tag docker.io/mirrorgooglecontainers/kube-controller-manager:v1.14.2 k8s.gcr.io/kube-controller-manager:v1.14.2
docker tag docker.io/mirrorgooglecontainers/etcd:3.3.10  k8s.gcr.io/etcd:3.3.10
docker tag docker.io/mirrorgooglecontainers/pause:3.1  k8s.gcr.io/pause:3.1
docker tag docker.io/coredns/coredns:1.3.1  k8s.gcr.io/coredns:1.3.1

docker rmi `docker images |grep docker.io/ |awk '{print $1":"$2}'`

3.2.2 Инициализация Мастера

  • Инициализировать кластер k8s с помощью kubeadm
kubeadm init --kubernetes-version=v1.14.0 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --ignore-preflight-errors=Swap
  • Если есть ошибка, используйте следующую команду, чтобы проверить
journalctl -xeu kubelet
  • Если процесс инициализации прерван, вы можете использовать следующую команду для возобновления
kubeadm reset
  • Ниже приведен результат последнего успешного выполнения. Вам необходимо сохранить результат выполнения, чтобы узел узла мог присоединиться к кластеру.
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 172.16.100.9:6443 --token 2dyd69.hrfsjkkxs4stim7n \
    --discovery-token-ca-cert-hash sha256:4e30c1f41aefb177b708a404ccb7e818e31647c7dbdd2d42f6c5c9894b6f41e7
  • Лучше всего выполнить следующую команду от имени обычного пользователя
# 在当前用户家目录下创建.kube目录并配置访问集群的config 文件
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
  • Разверните сетевой плагин flanel
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  • Просмотр модулей, работающих в пространстве имен kube-system
kubectl get pods -n kube-system
  • Просмотр состояния компонентов кластера k8s
kubectl get ComponentStatus
  • Завершение команды конфигурации
yum install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

3.3 Развернуть узел

Все операции в этом разделе выполняются только на узле Node.

3.3.1 Присоединение к кластеру

  • Присоединяйтесь к кластеру, обратите внимание на добавление --ignore-preflight-errors=Swap в конце команды, чтобы игнорировать проверку свопа хоста k8s (k8s требует бинарного свопа для производительности)
kubeadm join 172.16.100.9:6443 --token 2dyd69.hrfsjkkxs4stim7n \
    --discovery-token-ca-cert-hash sha256:4e30c1f41aefb177b708a404ccb7e818e31647c7dbdd2d42f6c5c9894b6f41e7 --ignore-preflight-errors=Swap
  • Возвращается результат, указывающий, что присоединение к кластеру прошло успешно.
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.

3.3.2 Просмотр хода выполнения

Когда узел-узел присоединяется к кластеру K8S, мастер запланирует некоторые компоненты на узле-узле для обработки транзакций кластера.До того, как эти компоненты будут загружены, узел-узел еще не готов в кластере.

  • Выполните следующую команду на узле, вы можете просмотреть ход загрузки изображения, ниже показан окончательный результат.
$ docker image ls
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
k8s.gcr.io/kube-proxy    v1.14.0             5cd54e388aba        6 weeks ago         82.1MB
quay.io/coreos/flannel   v0.11.0-amd64       ff281650a721        3 months ago        52.6MB
k8s.gcr.io/pause         3.1                 da86e6ba6ca1        16 months ago       742kB
  • Вы можете использовать следующую команду на Мастере, чтобы просмотреть статус недавно добавленного узла.
$ kubectl get nodes
NAME     STATUS   ROLES    AGE     VERSION
master   Ready    master   3d21h   v1.14.1
node1    Ready    <none>   3d21h   v1.14.1
node2    Ready    <none>   3d21h   v1.14.1
  • Просмотр состояния кластера
[root@master ~]# kubectl cluster-info 
Kubernetes master is running at https://10.234.2.204:6443
KubeDNS is running at https://10.234.2.204:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Metrics-server is running at https://10.234.2.204:6443/api/v1/namespaces/kube-system/services/https:metrics-server:/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
[root@master ~]# kubectl get componentstatuses
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok                  
scheduler            Healthy   ok                  
etcd-0               Healthy   {"health":"true"}   

Если вы считаете, что сетевой образ загружается медленно, вы можете упаковать образ на один и отправить его на другие узлы.

拷贝到node节点
for i in /tmp/*.tar; do scp -i $i root@172.16.0.15:/root/;done


node节点还原
for i in *.tar ;do docker load -i $i;done
  • Проверьте, какие компоненты находятся в пространстве имен k8s kube-system и на каком узле они работают.-o wide отображается подробно.
$ kubectl get pods -n kube-system -o wide

NAME                                 READY   STATUS    RESTARTS   AGE     IP              NODE         NOMINATED NODE   READINESS GATES
coredns-fb8b8dccf-cp24r              1/1     Running   0          26m     10.244.0.2      i-xeahpl98   <none>           <none>
coredns-fb8b8dccf-ljswp              1/1     Running   0          26m     10.244.0.3      i-xeahpl98   <none>           <none>
etcd-i-xeahpl98                      1/1     Running   0          25m     172.16.100.9    i-xeahpl98   <none>           <none>
kube-apiserver-i-xeahpl98            1/1     Running   0          25m     172.16.100.9    i-xeahpl98   <none>           <none>
kube-controller-manager-i-xeahpl98   1/1     Running   0          25m     172.16.100.9    i-xeahpl98   <none>           <none>
kube-flannel-ds-amd64-crft8          1/1     Running   3          16m     172.16.100.6    i-me87b6gw   <none>           <none>
kube-flannel-ds-amd64-nckw4          1/1     Running   0          6m41s   172.16.100.10   i-qhcc2owe   <none>           <none>
kube-flannel-ds-amd64-zb7sg          1/1     Running   0          23m     172.16.100.9    i-xeahpl98   <none>           <none>
kube-proxy-7kjkf                     1/1     Running   0          6m41s   172.16.100.10   i-qhcc2owe   <none>           <none>
kube-proxy-c5xs2                     1/1     Running   2          16m     172.16.100.6    i-me87b6gw   <none>           <none>
kube-proxy-rdzq2                     1/1     Running   0          26m     172.16.100.9    i-xeahpl98   <none>           <none>
kube-scheduler-i-xeahpl98            1/1     Running   0          25m     172.16.100.9    i-xeahpl98   <none>           <none>

3.3.3 Загрузка зеркала слишком медленная

Узел узла должен загрузить образ через стену.Это слишком медленно.Рекомендуется использовать функцию импорта и экспорта образа докера. Сначала упакуйте три образа мастера и отправьте их на узел, загрузите, а затем присоедините

  • экспорт
docker image save -o /tmp/kube-proxy.tar k8s.gcr.io/kube-proxy
docker image save -o /tmp/flannel.tar quay.io/coreos/flannel
docker image save -o /tmp/pause.tar k8s.gcr.io/pause
  • Импортировать
docker image load -i /tmp/kube-proxy.tar
docker image load -i /tmp/pause.tar
docker image load -i /tmp/flannel.tar

разное

Публикуйте свои заметки по адресу:GitHub.com/RedHat Series/Арвин…Добро пожаловать в один клик и три ссылки.