Kubernetes (1) Следуйте официальной документации, чтобы собрать K8S с нуля.

Kubernetes
Kubernetes (1) Следуйте официальной документации, чтобы собрать K8S с нуля.

Учебное пособие по Kubernetes Следуйте официальной документации, чтобы собрать K8S с нуля.

Адрес статьи:blog.Park Ruiqing.com/2019/09/17/…

предисловие

В этой статье читатель объяснит его установку и развертывание со ссылкой на официальную документацию Kubernetes.Kubernetes обновляется и повторяется очень быстро, и учебники, такие как книги и онлайн, могут быть неприменимы к новой версии, но официальная документация может.

Прочитав эту статью, вы получите:

  • Как прочитать официальное руководство по установке Kubernetes и настроить среду Kubernetes.
  • Соображения во время установки Kubernetes.
  • Избегайте общих ям.

Для прочтения этой статьи вам понадобится:

  • Ознакомьтесь с командами Linux.
  • Знайте, для чего нужен Kubernetes (иначе зачем его устанавливать (ಥ_ಥ)).
  • знать Докера

подготовка оборудования

Ссылка на документацию:Before you begin

серийный номер название количество Примечание
1 сервер 2 Операционная система: Linux (centos7, другие операционные системы также доступны, процесс установки аналогичен, вы можете обратиться к официальной документации)
Конфигурация машины: CPU >= 2, RAM >= 2G

отОфициальный сайтоказатьсяkubeadmЗапись документации по установке, Документ очень подробный.Читателям, у которых нет проблем с чтением на английском языке, рекомендуется просмотреть документ на английском языке напрямую.Могут быть проблемы, когда китайский документ неполный и обновление не установлено вовремя.

Предварительная подготовка

Автор предустановил две виртуальные машины, centos7 (CPUx2, память 2,5G) и зафиксировал IP-адреса этих двух виртуальных машин на роутере.

Изменить имя хоста

[root@k8s-master ~]$ vim /etc/hostname # 修改hostname
[root@k8s-master ~]$ vim /etc/hosts	# 将本机IP指向hostname
[root@k8s-master ~]$ reboot -h 		# 重启(可以做完全部前期准备后再重启)

После модификации конфигурация двух виртуальных машин выглядит следующим образом:

# in k8s-master
[root@k8s-master ~]$ cat /etc/hostname 
k8s-master
[root@k8s-master ~]$ cat /etc/hosts | grep k8s
10.33.30.92 k8s-master
10.33.30.91 k8s-worker

# in k8s-worker
[root@k8s-worker ~]$ cat /etc/hostname 
k8s-worker
[root@k8s-worker ~]$ cat /etc/hosts | grep k8s
10.33.30.92 k8s-master
10.33.30.91 k8s-worker

Подтвердите уникальность MAC и product_uuid

Ссылка на документацию:Verify the MAC address and product_uuid are unique for every node

[root@k8s-master ~]$ ifconfig -a    # 查看MAC
[root@k8s-master ~]$ cat /sys/class/dmi/id/product_uuid	# 查看product_uuid

Примечание. Если ваш centos7 не имеетifconfigкоманда, исполняемый файлyum install net-toolsустановить.

Настроить брандмауэр

Ссылка на документацию:Check required ports

Поскольку это тестовая среда локальной интрасети, автор для удобства напрямую закрыл брандмауэр.Если требования безопасности высоки, вы можете обратиться к официальной документации, чтобы освободить необходимые порты.

[root@k8s-master ~]$ systemctl stop firewalld	# 关闭服务
[root@k8s-master ~]$ systemctl disable firewalld	# 禁用服务

Отключить SELinux

Ссылка на документацию:coredns pods have CrashLoopBackOff or Error state

Исправлять/etc/selinux/config, настраиватьSELINUX=disabled, Перезагрузите машину.

[root@k8s-master ~]$ sestatus	# 查看SELinux状态
SELinux status: disabled

Отключить раздел подкачки

Ссылка на документацию:Before you begin

Swap disabled. You MUST disable swap in order for the kubelet to work properly.

редактировать/etc/fstab, закомментируйте swap.перезагрузить машину.

[root@k8s-master ~]$ vim /etc/fstab 
#/dev/mapper/cl-swap     swap                    swap    defaults        0 0

Установить Докер

Ссылка на документацию:Get Docker Engine - Community for CentOS

Официальная документация Docker достаточно подробно описывает этапы установки, и процесс не сложный, поэтому повторять их в этой статье я не буду.

  • Докер, пожалуйста, используйте18.09, k8s не поддерживает последнюю версию Docker19.x, При установке укажите номер версии явно, как описано в документации.yum install docker-ce-18.09.9-3.el7 docker-ce-cli-18.09.9-3.el7 containerd.io.

  • Если сеть не очень хорошая, вы можете переключиться на внутренние источники, такие как Alibaba Cloud, Китайский университет науки и технологий и т. д. Вот адрес документации по установке докера Alibaba Cloud Source:Служба образов контейнеров.

  • После завершения установки рекомендуется заменить источник докера на отечественный.Рекомендуется ускорение облачного образа Alibaba, естьОблачная учетная запись Алибабаможно использовать бесплатно.阿里云 -> 容器镜像服务 -> 镜像中心 -> 镜像加速

Настроить Докер

Адрес документа:Container runtimes

Исправлять/etc/docker/daemon.jsonдля следующего:

{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
  • вhttps://xxxxxxxx.mirror.aliyuncs.comзаАли КлаудЗеркальный адрес ускорения,xxxxxxxxЕго нужно заменить на адрес в личном кабинете, как показано на рисунке:

После завершения установки выполните:

[root@k8s-master ~]$ systemctl enable docker
[root@k8s-master ~]$ systemctl start docker

Установите Кубернетес

Адрес документа:Installing kubeadm, kubelet and kubectl

добавить источник

По причинам внутренней сети адрес в официальном документе недоступен.Эта статья заменена адресом изображения Alibaba Cloud, и можно выполнить следующий код:

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=1
repo_gpgcheck=1
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
exclude=kube*
EOF

Установить

[root@k8s-master ~]$ yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
[root@k8s-master ~]$ systemctl enable kubelet && systemctl start kubelet

Изменить конфигурацию сети

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system

Примечание: На этом этапе все вышеперечисленные операции также необходимо выполнить на машине Worker.Обратите внимание, что имя хоста и т. д. не должны совпадать.

Инициализировать мастер

Сгенерировать файл инициализации

[root@k8s-master ~]$ kubeadm config print init-defaults > kubeadm-init.yaml

В этом файле есть два места, которые необходимо изменить:

  • будетadvertiseAddress: 1.2.3.4Изменить на локальный адрес
  • будетimageRepository: k8s.gcr.ioпревратиться вimageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers

После модификации файл выглядит следующим образом:

apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 10.33.30.92
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  name: k8s-master
  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.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.15.0
networking:
  dnsDomain: cluster.local
  serviceSubnet: 10.96.0.0/12
scheduler: {}

Скачать зеркало

[root@k8s-master ~]$ kubeadm config images pull --config kubeadm-init.yaml
[Уведомление об авторских правах]
Эта статья была опубликована вБлог Пак Жуцин, перепечатка для некоммерческого использования разрешена, но перепечатка должна сохранить оригинального автораПарк Жуйцини ссылка:blog.piaoruiqing.com. Если есть какие-либо переговоры или сотрудничество с точки зрения авторизации, пожалуйста, свяжитесь с адресом электронной почты:piaoruiqing@gmail.com.

выполнить инициализацию

[root@k8s-master ~]$ kubeadm init --config kubeadm-init.yaml

Дождавшись завершения выполнения, он выведет следующее:

...
Your Kubernetes control-plane has initialized successfully!
...
Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 10.33.30.92:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:2883b1961db36593fb67ab5cd024f451b934fc0e72e2fa3858dda3ad3b225837 

Последние две строки нужно сохранить,kubeadm join ...Это команда, которая должна быть выполнена рабочим узлом для присоединения.

Затем настройте среду, чтобы текущий пользователь мог выполнять команды kubectl:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Проверьте это: здесьNotReadyЭто потому, что сеть еще не настроена.

[root@k8s-master kubernetes]$ kubectl get node
NAME         STATUS     ROLES    AGE     VERSION
k8s-master   NotReady   master   3m25s   v1.15.3

Настроить сеть

Адрес документа:Instructions

Скачать файл описания

[root@k8s-master ~]$ wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
[root@k8s-master ~]$ cat kubeadm-init.yaml | grep serviceSubnet:
serviceSubnet: 10.96.0.0/12

Открытымcalico.yaml, будет192.168.0.0/16превратиться в10.96.0.0/12

Следует отметить, что IP-адреса в calico.yaml и kubeadm-init.yaml должны быть согласованы, либо измените kubeadm-init.yaml перед инициализацией, либо измените calico.yaml после инициализации.

воплощать в жизньkubectl apply -f calico.yamlИнициализируйте сеть.

Проверьте информацию об узле в это время, статус мастера ужеReady.

[root@k8s-master ~]$ kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   15m   v1.15.3

Установить информационную панель

Адрес документа:Web UI (Dashboard)

Развертывание приборов

Адрес документа:Deploying the Dashboard UI

[root@k8s-master ~]$ wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta4/aio/deploy/recommended.yaml
[root@k8s-master ~]$ kubectl apply -f recommended.yaml 

После развертывания выполнитьkubectl get pods --all-namespacesПросмотр статуса модулей

[root@k8s-master kubernetes]$ kubectl get pods --all-namespaces | grep dashboard
NAMESPACE              NAME                                        READY   STATUS   
kubernetes-dashboard   dashboard-metrics-scraper-fb986f88d-m9d8z   1/1     Running
kubernetes-dashboard   kubernetes-dashboard-6bb65fcc49-7s85s       1/1     Running 

Создать пользователя

Адрес документа:Creating sample user

Создать пользователя для входа в Dashboard Создать файлdashboard-adminuser.yamlСодержание следующее:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kube-system

Выполнение заказаkubectl apply -f dashboard-adminuser.yaml.

создать сертификат

Адрес документа:Accessing Dashboard 1.7.X and above

Официальный документ предоставляет метод входа для входа в версии 1.7.X и выше, но он не ясен, и автор не полностью следовал документу.

[root@k8s-master ~]$ grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.crt
[root@k8s-master ~]$ grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d >> kubecfg.key
[root@k8s-master ~]$ openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"

Третья команда запросит пароль при создании сертификата, который можно пропустить, дважды нажав Enter.

kubecfg.p12То есть вам нужно импортировать сертификат клиентской машины.Скопируйте сертификат на клиентскую машину и импортируйте его.

~$ scp root@10.33.30.92:/root/.kube/kubecfg.p12 ./
  • Следует отметить, что: если пароль был пропущен при генерации сертификата, вы можете ввести пароль при появлении запроса на его ввод, не беспокоясь о том, откуда пароль (゚▽゚)/

На данный момент мы можем войти в панель, посетить адрес:https://{k8s-master-ip}:6443/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#/login, при входе вам будет предложено выбрать сертификат, а после подтверждения вам будет предложено ввести текущие имя пользователя и пароль (обратите внимание, что это имя пользователя и пароль компьютера).

Войти в панель управления

Адрес документа:Bearer Token

воплощать в жизньkubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')Получить токен.

[root@k8s-master .kube]$ kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-dhhkb
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: b20d1143-ce94-4379-9e14-8f80f06d8479

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLWRoaGtiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJiMjBkMTE0My1jZTk0LTQzNzktOWUxNC04ZjgwZjA2ZDg0NzkiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.f6IbPGwIdFZWStzBj8_vmF01oWW5ccaCpPuVQNLSK1pgEqn0kNVK_x0RYSuKEnujObzpQQdFiRYcI6ITHja2PIVc5Nv83VCn5IaLvZdYuGZWUYRw0efJUBMA4J4N8-pRkiw6fYAuWLeGYghLNXL_nDdC_JkG75ASqrr3U1MVaikOcfrEPaI-T_AJ3TMYhI8aFoKiERpumu5W1K6Jl80Am9pWDX0Ywis5SSUP1VYfu-coI48EXSptcaxEyv58PrHUd6t_oMVV9rpqSxrNtMZvMeXqe8Hnl21vR7ls5yTZegYtHXSc3PKvCaIalKhYXAuhogNcIXHaMzvLSbf-DSQkVw

Скопируйте токен на страницу входа, нажмите, чтобы войти, эффект будет следующим:

Добавить рабочий узел

Повторение前期准备-修改hostname ~ 安装Kubernetes-修改网络配置Все операции, инициализируйте рабочую машину.

Выполните следующую команду, чтобы добавить воркер в кластер:

kubeadm join 10.33.30.92:6443 --token abcdef.0123456789abcdef \
    --discovery-token-ca-cert-hash sha256:2883b1961db36593fb67ab5cd024f451b934fc0e72e2fa3858dda3ad3b225837 
  • Примечание. Здесь секретный ключ генерируется после инициализации Мастера, см. предыдущий раздел.

После добавления проверьте состояние узла на Мастере:

[root@k8s-master ~]$ kubectl get node
NAME         STATUS   ROLES    AGE   VERSION
k8s-master   Ready    master   10h   v1.15.3
k8s-worker   Ready    <none>   96s   v1.15.3

Также видно на панели:

Если эта статья была вам полезна, ставьте лайк ( ̄▽ ̄)"

использованная литература

серия статей

Добро пожаловать на номер общественного беспокойства (поэтический код):

[Уведомление об авторских правах]
Эта статья была опубликована вБлог Пак Жуцин, перепечатка для некоммерческого использования разрешена, но перепечатка должна сохранить оригинального автораПарк Жуйцини ссылка:blog.piaoruiqing.com. Если есть какие-либо переговоры или сотрудничество с точки зрения авторизации, пожалуйста, свяжитесь с адресом электронной почты:piaoruiqing@gmail.com.