Введение в Kubernetes Kops для начинающих

Опубликовано: 2021-06-13

Давайте узнаем о Kops, инструменте операций Kubernetes.

Kubernetes — один из самых популярных инструментов DevOps благодаря своей потрясающей системе оркестровки контейнеров и ее функциям. Но хотя Kubernetes предлагает так много функций, настраивать кластер Kubernetes с нуля довольно сложно. Здесь на сцену выходит Копс.

С Kops легко создать кластер Kubernetes на облачных провайдерах, таких как AWS, Google Cloud и т. д. Это упрощает настройку кластера Kubernetes, и в этой статье я расскажу об этом замечательном инструменте.

Что такое Копс?

Kops, также известный как операции Kubernetes, — это официальный проект Kubernetes с открытым исходным кодом, который позволяет создавать, поддерживать, обновлять и уничтожать высокодоступный кластер Kubernetes производственного уровня. Он предоставляет облачную инфраструктуру также в зависимости от требований. Разработчики Kops описывают его как kubectl для кластеров Kubernetes.

Kops в основном используется при развертывании кластеров AWS и GCE Kubernetes. Kops официально поддерживает только AWS, другие облачные провайдеры, такие как DigitalOcean, GCE и OpenStack, находятся на стадии бета-тестирования.

Если вы уже работали с kubectl, вам будет комфортно работать с Kops. Kops предоставляет команды для создания, получения, обновления и удаления кластеров. Кроме того, Kops знает, как применять изменения в существующих кластерах, поскольку использует декларативную конфигурацию. С помощью Kops вы также можете масштабировать кластер Kubernetes вверх и вниз.

Ниже приведены особенности Kops:

  • Развертывание мастеров Kubernetes с высокой доступностью
  • Поддерживаются скользящие обновления кластера.
  • Автоматизирует выделение кластеров AWS и GCE Kubernetes.
  • Управляет надстройками кластера
  • Автодополнение команды в командной строке
  • Генерирует конфигурации CloudFormation и Terraform
  • Поддерживает модель синхронизации состояния для пробных прогонов и автоматической идемпотентности.
  • Создает группы экземпляров для поддержки гетерогенных кластеров.

Установка копов

Ниже приведены простые шаги по установке Kops в среде Linux. Я использую Ubuntu 20.x.

Сначала загрузите Kops из пакета релизов. Приведенная ниже команда загружает последний пакет Kops.

 geekflare@ip-170-11-26-119:~$ curl -Lo kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64 Saving to: 'kops-linux-amd64' 100%[=========================================================================================================================================================================>] 81,964,000 8.37MB/s in 7.1s 2021-06-10 16:23:19 (7.84 MB/s) - 'kops-linux-amd64' saved [81964000/81964000]

Вам необходимо предоставить права на выполнение загруженному файлу kops и переместить его в каталог /usr/local/bin/.

 geekflare@ip-170-11-26-119:~$ sudo chmod +x kops-linux-amd64 geekflare@ip-170-11-26-119:~$ sudo mv kops-linux-amd64 /usr/local/bin/kops

Установка сделана. Теперь вы можете запустить команду kops для проверки установки.

 geekflare@ip-170-11-26-119:~$ kops kops is Kubernetes ops. kops is the easiest way to get a production grade Kubernetes cluster up and running. We like to think of it as kubectl for clusters. kops helps you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes clusters from the command line. AWS (Amazon Web Services) is currently officially supported, with GCE and VMware vSphere in alpha support. Usage: kops [command] Available Commands: completion Output shell completion code for the given shell (bash or zsh). create Create a resource by command line, filename or stdin. delete Delete clusters,instancegroups, or secrets. describe Describe a resource. edit Edit clusters and other resources. export Export configuration. get Get one or many resources. import Import a cluster. replace Replace cluster resources. rolling-update Rolling update a cluster. toolbox Misc infrequently used commands. update Update a cluster. upgrade Upgrade a kubernetes cluster. validate Validate a kops cluster. version Print the kops version information. Flags: --alsologtostderr log to standard error as well as files --config string config file (default is $HOME/.kops.yaml) -h, --help help for kops --log_backtrace_at traceLocation when logging hits line file:N, emit a stack trace (default :0) --log_dir string If non-empty, write log files in this directory --logtostderr log to standard error instead of files (default false) --name string Name of cluster --state string Location of state storage --stderrthreshold severity logs at or above this threshold go to stderr (default 2) -v, --v Level log level for V logs --vmodule moduleSpec comma-separated list of pattern=N settings for file-filtered logging Use "kops [command] --help" for more information about a command.

Проверьте версию Kops, чтобы убедиться, что Kops установлен правильно.

 geekflare@ip-170-11-26-119:~$ kops version Version 1.20.1 (git-5a27dad)

Давайте теперь рассмотрим несколько важных команд Kops, которые широко используются администраторами для выполнения операций Kubernetes.

Полицейские команды

Ниже приведены широко используемые команды Kops, которые вы должны знать.

полицейские создают

Команда kops create используется для регистрации кластера.

Синтаксис: kops создает кластер <имя_кластера>

Существует множество других параметров, таких как зона, регион, тип экземпляра, количество узлов и т. д., которые вы можете добавить в дополнение к команде по умолчанию.

обновление копов

Команда обновления kops используется для обновления кластера с указанной спецификацией кластера.

Синтаксис: kops update cluster –name <имя_кластера>

Вы можете запустить эту команду в режиме предварительного просмотра, чтобы быть в большей безопасности, и как только выходные данные предварительного просмотра совпадут с вашими ожиданиями, вы можете запустить команду с флагом –yes, чтобы применить изменения к кластеру.

полицейские получают

Команда kops get используется для получения списка всех кластеров.

Синтаксис: копы получают кластеры

полицейские удалить

Команда удаления kops используется для удаления определенного кластера из реестра и всех облачных ресурсов, назначенных этому кластеру.

Синтаксис: kops удалить кластер – имя <имя_кластера>

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

kops непрерывное обновление

Команда kops roll-update используется для обновления кластера Kubernetes в соответствии со спецификациями облака и kops.

Синтаксис: кластер непрерывного обновления kops – имя <имя_кластера>

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

копы подтверждают

Команда kops validate проверяет, работает ли созданный вами кластер. Например, если модули и узлы находятся в состоянии ожидания, команда проверки вернет, что кластер еще не исправен.

Синтаксис: kops validate cluster –wait <указанное_время>

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

Это было все об основах Kops, теперь позвольте мне показать вам, как создать кластер Kubernetes на AWS с помощью Kops.

Настройте Kubernetes на AWS с помощью Kops

Прежде чем приступить к шагам, упомянутым ниже, выполните несколько предварительных условий:

  • Убунту 20.04
  • Интерфейс командной строки AWS
  • АМС Настройка

Установка кубектла

Во-первых, я установлю kubectl.

Kubectl используется для запуска команд командной строки в кластерах Kubernetes. Загрузите пакет kubectl.

 geekflare@ip-170-11-26-119:~$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 39.6M 100 39.6M 0 0 6988k 0 0:00:07 0:00:07 --:--:-- 6988k

Вам необходимо предоставить права на выполнение для загруженного файла и переместить его в каталог /usr/local/bin/.

 geekflare@ip-170-11-26-119:~$ chmod +x ./kubectl geekflare@ip-170-11-26-119:~$ sudo mv ./kubectl /usr/local/bin/kubectl

Создать корзину S3

После установки и настройки интерфейса командной строки AWS на вашем компьютере с Linux вы сможете запускать команды aws . В моей системе Ubuntu установлен aws cli, поэтому позвольте мне запустить простую команду, которая выведет список всех корзин в S3.

 geekflare@ip-170-11-26-119:~$ aws s3 ls

Он будет пуст, потому что на данный момент у меня нет ведра s3. Позвольте мне проверить, запущен ли какой-либо экземпляр ec2.

 geekflare@ip-170-11-26-119:~$ aws ec2 describe-instances { "Reservations": [] }

Это означает, что на данный момент ни один экземпляр ec2 не запущен.

Теперь вам нужно создать корзину s3, в которой Kops будет сохранять всю информацию о состоянии кластера. Здесь я создаю ведро s3 в регионе us-west-2 с именем geekkops-bucket-1132. Вы можете использовать LocationConstraint, чтобы избежать ошибок с регионом.

 geekflare@ip-170-11-26-119:~$ aws s3api create-bucket --bucket geekkops-bucket-1132 --region us-west-2 --create-bucket-configuration LocationConstraint=us-west-2 { "Location": "http://geekkops-bucket-1132.s3.amazonaws.com/" }

Если я снова aws s3 bucket , я получу только что созданное ведро.

 geekflare@ip-170-11-26-119:~$ aws s3 ls 2021-06-10 16:30:13 geekkops-bucket-1132

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

 geekflare@ip-170-11-26-119:~$ aws s3api put-bucket-versioning --bucket geekkops-bucket-1132 --versioning-configuration Status=Enabled

Сгенерировать ключ

Сгенерируйте ssh-ключ, который будет использоваться Kops для входа в кластер и генерации пароля.

 geekflare@ip-170-11-26-119:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/ubuntu/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/ubuntu/.ssh/id_rsa. Your public key has been saved in /home/ubuntu/.ssh/id_rsa.pub. The key fingerprint is: SHA256:fH4JCBXMNRqzk1hmoK+cXmwSFaeBsuGBA5IWMkNuvq0 geekflare@ip-170-11-26-119 The key's randomart image is: +---[RSA 2048]----+ |O=. .++Xoo | |B++ .. @o* . | |.= =. = = | |ooooo | | . . . S o | | o. = o . . | | . .= + . o | | .. + . | | E . | +----[SHA256]-----+

Экспорт переменных среды

Предоставьте имя кластера и корзину s3 в качестве переменных среды. Это будет применимо только для текущего сеанса. Я использую суффикс «.k8s.local», потому что я не использую предварительно настроенный DNS.

 geekflare@ip-170-11-26-119:~$ export KOPS_CLUSTER_NAME=geekdemo1.k8s.local geekflare@ip-170-11-26-119:~$ export KOPS_STATE_STORE=s3://geekkops-bucket-1132

Создайте кластер

Используйте команду kops create для создания кластера. Ниже приведены параметры, которые я использую для создания кластера Kubernetes на AWS с помощью Kops:

  • --cloud сообщает облачному провайдеру, которого я использую
  • --zones — это зона, в которой будет развернут экземпляр кластера.
  • --node-count — количество узлов для развертывания в кластере Kubernetes.
  • --node-size и --master-size — это типы экземпляров ec2, я использую микро-экземпляры.
  • --name имя кластера
 geekflare@ip-170-11-26-119:~$ kops create cluster --cloud=aws --zones=eu-central-1a --node-count=1 --node-size=t2.micro --master-size=t2.micro --name=${KOPS_CLUSTER_NAME} I0216 16:35:24.225238 4326 subnets.go:180] Assigned CIDR 172.20.32.0/19 to subnet eu-central-1a I0216 16:35:24.068088 4326 create_cluster.go:717] Using SSH public key: /home/ubuntu/.ssh/id_rsa.pub Previewing changes that will be made: I0216 16:35:24.332590 4326 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:35:24.392712 4326 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:35:24.792113 4326 vfs_castore.go:604] CA private key was not found I0216 16:35:24.938057 4326 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:35:25.436407 4326 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:35:25.822395 4326 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:35:25.823088 4326 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:35:26.406919 4326 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:35:27.842148 4326 executor.go:111] Tasks: 83 done / 83 total; 0 can run LaunchTemplate/master-eu-central-1a.masters.geekdemo1.k8s.local AssociatePublicIP true HTTPPutResponseHopLimit 1 HTTPTokens optional IAMInstanceProfile name:masters.geekdemo1.k8s.local id:masters.geekdemo1.k8s.local ImageID 099720109477/ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-20210119.1 InstanceType t2.micro RootVolumeSize 64 RootVolumeType gp2 RootVolumeEncryption false RootVolumeKmsKey SSHKey name:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 id:kubernetes.geekdemo1.k8s.local-3e:19:92:ca:dd:64:d5:cf:ff:ed:3a:92:0f:40:d4:e8 SecurityGroups [name:masters.geekdemo1.k8s.local] SpotPrice Tags {k8s.io/cluster-autoscaler/node-template/label/kubernetes.io/role: master, k8s.io/cluster-autoscaler/node-template/label/kops.k8s.io/instancegroup: master-eu-central-1a, k8s.io/role/master: 1, kops.k8s.io/instancegroup: master-eu-central-1a, Name: master-eu-central-1a.masters.geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, k8s.io/cluster-autoscaler/node-template/label/node-role.kubernetes.io/master: } Subnet/eu-central-1a.geekdemo1.k8s.local ShortName eu-central-1a VPC name:geekdemo1.k8s.local AvailabilityZone eu-central-1a CIDR 172.20.32.0/19 Shared false Tags {KubernetesCluster: geekdemo1.k8s.local, kubernetes.io/cluster/geekdemo1.k8s.local: owned, SubnetType: Public, kubernetes.io/role/elb: 1, Name: eu-central-1a.geekdemo1.k8s.local} VPC/geekdemo1.k8s.local CIDR 172.20.0.0/16 EnableDNSHostnames true EnableDNSSupport true Shared false Tags {kubernetes.io/cluster/geekdemo1.k8s.local: owned, Name: geekdemo1.k8s.local, KubernetesCluster: geekdemo1.k8s.local} VPCDHCPOptionsAssociation/geekdemo1.k8s.local VPC name:geekdemo1.k8s.local DHCPOptions name:geekdemo1.k8s.local Must specify --yes to apply changes Cluster configuration has been created. Suggestions: * list clusters with: kops get cluster * edit this cluster with: kops edit cluster geekdemo1.k8s.local * edit your node instance group: kops edit ig --name=geekdemo1.k8s.local nodes-eu-central-1a * edit your master instance group: kops edit ig --name=geekdemo1.k8s.local master-eu-central-1a Finally configure your cluster with: kops update cluster --name geekdemo1.k8s.local --yes –admin

Запустите команду kops get, чтобы узнать, создан ли кластер.

 geekflare@ip-170-11-26-119:~$ kops get cluster NAME CLOUD ZONES geekdemo1.k8s.local aws eu-central-1a

Обновите кластер

Чтобы применить указанные спецификации кластера к кластеру, выполните команду kops update.

 geekflare@ip-170-11-26-119:~$ kops update cluster --name geekdemo1.k8s.local --yes --admin I0216 16:38:16.800767 4344 apply_cluster.go:465] Gossip DNS: skipping DNS validation I0216 16:38:16.919282 4344 executor.go:111] Tasks: 0 done / 83 total; 42 can run W0216 16:38:17.343336 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:18.421652 4344 keypair.go:195] Issuing new certificate: "etcd-clients-ca" I0216 16:38:18.450699 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-main" I0216 16:38:19.470785 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-main" I0216 16:38:19.531852 4344 keypair.go:195] Issuing new certificate: "etcd-peers-ca-events" I0216 16:38:19.551601 4344 keypair.go:195] Issuing new certificate: "apiserver-aggregator-ca" I0216 16:38:19.571834 4344 keypair.go:195] Issuing new certificate: "etcd-manager-ca-events" I0216 16:38:19.592090 4344 keypair.go:195] Issuing new certificate: "master" W0216 16:38:19.652894 4344 vfs_castore.go:604] CA private key was not found I0216 16:38:19.653013 4344 keypair.go:195] Issuing new certificate: "ca" I0216 16:38:24.344075 4344 executor.go:111] Tasks: 42 done / 83 total; 17 can run I0216 16:38:24.306125 4344 executor.go:111] Tasks: 59 done / 83 total; 18 can run I0216 16:38:26.189798 4344 executor.go:111] Tasks: 77 done / 83 total; 2 can run I0216 16:38:26.190464 4344 executor.go:111] Tasks: 79 done / 83 total; 2 can run I0216 16:38:26.738600 4344 executor.go:111] Tasks: 81 done / 83 total; 2 can run I0216 16:38:28.810100 4344 executor.go:111] Tasks: 83 done / 83 total; 0 can run I0216 16:38:29.904257 4344 update_cluster.go:313] Exporting kubecfg for cluster kops has set your kubectl context to geekdemo1.k8s.local Cluster is starting. It should be ready in a few minutes. Suggestions: * validate cluster: kops validate cluster --wait 10m * list nodes: kubectl get nodes --show-labels * ssh to the master: ssh -i ~/.ssh/id_rsa [email protected] * the ubuntu user is specific to Ubuntu. If not using Ubuntu please use the appropriate user based on your OS. * read about installing addons at: https://kops.sigs.k8s.io/operations/addons.

Если вы сразу проверите, работают узлы Kubernetes или нет, вы получите ошибку. Вам нужно немного потерпеть и подождать несколько минут (5-10), пока кластер не будет создан.

 geekflare@ip-170-11-26-119:~$ kubectl get nodes Unable to connect to the server: dial tcp: lookup api-geekdemo1-k8s-local-dason2-1001342368.eu-central-1.elb.amazonaws.com on 127.0.0.53:53: no such host

Проверка кластера

Я запускаю команду проверки в течение 5 минут, чтобы проверить, работает ли кластер и работает ли он или нет. В выводе проверки вы сможете увидеть детали узла, когда они будут запущены.

 geekflare@ip-170-11-26-119:~$ kops validate cluster --wait 5m Validating cluster geekdemo1.k8s.local INSTANCE GROUPS NAME ROLE MACHINETYPE MIN MAX SUBNETS master-eu-central-1a Master t2.micro 1 1 eu-central-1a nodes-eu-central-1a Node t2.micro 1 1 eu-central-1a

Список узлов и модулей

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

 geekflare@ip-170-11-26-119:~$ kubectl get nodes NAME STATUS ROLES AGE VERSION ip-173-19-35-156.eu-central-1.compute.internal Ready master 10m v1.20.1 ip-172-36-23-149.eu-central-1.compute.internal Ready node 5m38s v1.20.1

Вы можете проверить все модули, работающие в кластере Kubernetes.

 geekflare@ip-170-11-26-119:~$ kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system dns-controller-8d8889c4b-xp9dl 1/1 Running 0 8m26s kube-system etcd-manager-events-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system etcd-manager-main-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kops-controller-9skdk 1/1 Running 3 6m51s kube-system kube-apiserver-ip-173-19-35-156.eu-central-1.compute.internal 2/2 Running 0 10m kube-system kube-controller-manager-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 6 10m kube-system kube-dns-696cb84c7-g8nhb 3/3 Running 0 4m27s kube-system kube-dns-autoscaler-55f8f75459-zlxbr 1/1 Running 0 7m18s kube-system kube-proxy-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 0 10m kube-system kube-proxy-ip-172-36-23-149.eu-central-1.compute.internal 1/1 Running 0 7m2s kube-system kube-scheduler-ip-173-19-35-156.eu-central-1.compute.internal 1/1 Running 5 10m

Удалить кластер

Как и при создании кластера Kubernetes, удалить кластер Kubernetes с помощью Kops очень просто. Эта команда удаления kops удалит все облачные ресурсы кластера и сам реестр кластера.

 geekflare@ip-170-11-26-119:~$ kops delete cluster --name geekdemo1.k8s.local --yes TYPE NAME ID autoscaling-config master-eu-central-1a.masters.geekdemo1.k8s.local lt-0cc11aec1943204e4 autoscaling-config nodes-eu-central-1a.geekdemo1.k8s.local lt-0da65d2eaf6de9f5c autoscaling-group master-eu-central-1a.masters.geekdemo1.k8s.local master-eu-central-1a.masters.geekdemo1.k8s.local autoscaling-group nodes-eu-central-1a.geekdemo1.k8s.local nodes-eu-central-1a.geekdemo1.k8s.local dhcp-options geekdemo1.k8s.local dopt-0403a0cbbfbc0c72b iam-instance-profile masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-instance-profile nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local iam-role masters.geekdemo1.k8s.local masters.geekdemo1.k8s.local iam-role nodes.geekdemo1.k8s.local nodes.geekdemo1.k8s.local instance master-eu-central-1a.masters.geekdemo1.k8s.local i-069c73f2c23eb502a instance nodes-eu-central-1a.geekdemo1.k8s.local i-0401d6b0d4fc11e77 iam-instance-profile:nodes.geekdemo1.k8s.local ok load-balancer:api-geekdemo1-k8s-local-dason2 ok iam-instance-profile:masters.geekdemo1.k8s.local ok iam-role:masters.geekdemo1.k8s.local ok instance:i-069c73f2c23eb502a ok autoscaling-group:nodes-eu-central-1a.geekdemo1.k8s.local ok iam-role:nodes.geekdemo1.k8s.local ok instance:i-0401d6b0d4fc11e77 ok autoscaling-config:lt-0cc11aec1943204e4 ok autoscaling-config:lt-0da65d2eaf6de9f5c ok autoscaling-group:master-eu-central-1a.masters.geekdemo1.k8s.local ok keypair:key-0d82g920j421b89dn ok Deleted kubectl config for geekdemo1.k8s.local Deleted cluster: "geekdemo1.k8s.local"

Вывод

Я надеюсь, что эта статья о Kops была полезной, и сегодня вы узнали что-то новое. Kops — фантастический инструмент для работы с Kubernetes в облаке. Итак, попробуйте выполнить шаги, описанные в этой статье, и настройте свой кластер Kubernetes на AWS с помощью Kops.