Развертывание приложений Kubernetes (2)

Kubernetes
Развертывание приложений Kubernetes (2)

Учебное пособие по развертыванию приложений Kubernetes

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

предисловие

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

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

  • Узнайте, как развертывать приложения в k8s
  • Как упаковать образ Docker и загрузить его в приватный репозиторий

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

Понимание файлов описания

Во-первых, мы разбираемся с файлом описания, развертывая Nginx в Kubernetes.

Как правило, Kubernetes использует yaml (или json) для описания конфигурации релиза Вот простой файл описания:nginx-pod.yaml

apiVersion: v1      # 描述文件所遵循KubernetesAPI的版本
kind: Pod           # 描述的类型是pod
metadata:
  name: nginx-pod   # pod的名称
  labels:           # 标签
    app: nginx-pod
    env: test
spec:
  containers:
    - name: nginx-pod     # 容器名
      image: nginx:1.15   # 镜像名称及版本
      imagePullPolicy: IfNotPresent   # 如果本地不存在就去远程仓库拉取
      ports:
        - containerPort: 80   # pod对外端口
  restartPolicy: Always

Авторизуемся на Мастер-ноде и используемkubectlкоманда для развертывания приложения, описанного в этом файле (конечно, его также можно опубликовать с помощью панели инструментов).

kubectl get podsКоманда используется для просмотра списка модулей, используйтеgrepОтфильтруйте модули, связанные с nginx.На данный момент nginx выпущен.Мы можем визуально просматривать статус приложения на панели инструментов.

Примечание. Для удаления модуля можно использоватьkubectl delete -f nginx-pod.yamlКоманды также можно выполнять непосредственно на приборной панели.

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

Как получить доступ к сервису

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

Чтобы получить доступ к службам в модуле, проще всего использовать переадресацию портов и выполнить следующую команду для передачи хоста9999порт с nginx-pod80Привязка порта:

[root@nas-centos1 ~]$ kubectl port-forward --address 0.0.0.0 nginx-pod 9999:80
Forwarding from 0.0.0.0:9999 -> 80
Handling connection for 9999

На данный момент мы можем получить доступ к Nginx, подключившись к порту 9999 хоста.

Развернуть локальный проект

Чтобы опубликовать локально разработанный проект в Kubernetes, вам необходимо упаковать проект в образ Docker, а затем отправить образ в репозиторий (доступны как общедоступные, так и частные репозитории).

Во-первых, нам нужен локальный проект, который можно запустить.Автор создал простой веб-проект, используя spring-boot:

@RestController
@RequestMapping(value = "/k8s-test")
@SpringBootApplication
public class K8sTestApplication {

    @GetMapping(value = "/timestamp")
    public ResponseEntity<?> getTimestamp() {
        return ResponseEntity.ok(System.currentTimeMillis() + "\n");
    }

    public static void main(String[] args) {
        SpringApplication.run(K8sTestApplication.class, args);
    }
}

Упаковка образов Docker

Ссылаться на:Dockerfile reference

С проектом нам нужно упаковать его в образ Docker,DockerfileСодержание следующее:

FROM java:8-alpine
COPY ./k8s-test-0.0.1-SNAPSHOT.jar /usr/app/
WORKDIR /usr/app
ENTRYPOINT ["java", "-jar", "k8s-test-0.0.1-SNAPSHOT.jar"]
  • FROM java:8-alpine: изображение основано наjava-8-alpineзеркало.
  • COPY ./target/k8s-test-0.0.1-SNAPSHOT.jar /usr/app/: Скопируйте скомпилированный и упакованный jar на зеркало/usr/appПод содержанием.
  • WORKDIR /usr/app: Рабочий каталог указан как/usr/app.
  • ENTRYPOINT ["java", "-jar", "k8s-test-0.0.1-SNAPSHOT.jar"]: выполняется при запуске докераjava -jar k8s-test-0.0.1-SNAPSHOT.jarЗаказ

Перейдите в каталог, где находится Dockerfile, и выполнитеdocker build -t piaoruiqing/k8s-test .Упакуйте его. Будьте осторожны, чтобы не пропустить последнюю часть команды., который представляет текущий каталог.

[root@nas-centos1 k8s-test]$ docker build -t piaoruiqing/k8s-test .

пройти черезdocker imagesКоманда может просмотреть список локальных зеркал:

[root@nas-centos1 k8s-test]$ docker images | grep k8s
piaoruiqing/k8s-test     latest         efe9e9625376        4 minutes ago       174MB

отправить в удаленный репозиторий

После того, как образ Docker упакован, его необходимо отправить в репозиторий образов для использования каждым узлом Kubernetes.В этой статье используется платформа Alibaba Cloud.Служба образов контейнеровНапример.

Сначала войдите в консоль Alibaba Cloud ->Служба образов контейнеров, чтобы создать пространство имен:

# 登录, 用于登录的用户名为阿里云账号全名, 密码为开通服务时设置的密码.
[root@nas-centos1 k8s-test]$ docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com
# 打标签, 镜像ID可以通过 docker images 命令查看
[root@nas-centos1 k8s-test]$ docker tag efe9e9625376 registry.cn-hangzhou.aliyuncs.com/piaoruiqing/k8s-test:0.0.1
# 推送到阿里云镜像仓库
[root@nas-centos1 k8s-test]$ docker push registry.cn-hangzhou.aliyuncs.com/piaoruiqing/k8s-test:0.0.1

развертывать

Поддержка частной библиотеки

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

kubectl create secret docker-registry docker-registry-secret --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=[用户名] --docker-password=[密码] --docker-email=[邮箱]
  • docker-registry-secret: Укажите ключевое имя ключа, которое можно определить самостоятельно.
  • docker-server: укажите адрес репозитория Docker.
  • docker-username: укажите имя пользователя репозитория Docker.
  • docker-password: укажите пароль для входа в репозиторий Docker.
  • docker-email: укажите адрес электронной почты (необязательно).

доступныйkubectl get secretsПосмотреть все секреты

[root@nas-centos1 k8s-test]$ kubectl get secrets
NAME                     TYPE                                  DATA   AGE
default-token-s7bps      kubernetes.io/service-account-token   3      13d
docker-registry-secret   kubernetes.io/dockerconfigjson        1      2m50s

начать развертывание

При доступе к частной библиотеке необходимо указать секрет в файле описания следующим образом:

apiVersion: v1
kind: Pod
metadata:
  name: k8s-test-pod
  labels:
    app: k8s-test-pod
spec:
  containers:
    - name: k8s-test-pod
      image: registry.cn-hangzhou.aliyuncs.com/piaoruiqing/k8s-test:0.0.1
      imagePullPolicy: IfNotPresent
  restartPolicy: Always
  imagePullSecrets:
    - name: docker-registry-secret    # 这里就是前文中创建的secret, 用来访问私库

Выполнение заказаkubectl apply -f k8s-test-pod.yamlЧтобы развернуть, мы можем просмотреть его на панели инструментов после завершения.

использоватьkubectl port-forward --address 0.0.0.0 k8s-test-pod 80:8080Привяжите хост (мастер) порт 80 и порт 8080 пода. Таким образом, мы можем получить доступhttp://10.33.30.95/k8s-test/timestamp.

[root@nas-centos2 ~]$ curl 10.33.30.95/k8s-test/timestamp
1569512136028

Развернуть кластер

Теперь мы успешно развернули экземпляр приложения в Kubernetes. В большинстве случаев в производственной среде наше приложение требует развертывания кластера. В этом случае мы можем использовать Deployment для его описания:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-test
  labels:
    app: k8s-test
spec:
  replicas: 3		# 副本数量
  template:
    metadata:
      name: k8s-test
      labels:
        app: k8s-test
        env: test
    spec:
      containers:
        - name: k8s-test
          image: registry.cn-hangzhou.aliyuncs.com/piaoruiqing/k8s-test:0.0.1
          imagePullPolicy: IfNotPresent
          ports:
            - name: http-port
              containerPort: 8080
      imagePullSecrets:
        - name: docker-registry-secret
      restartPolicy: Always
  selector:
    matchLabels:
      app: k8s-test

Аналогичным образом используйтеkubectl apply -fВыдается команда на настройку.

[root@nas-centos1 k8s-test]$ kubectl apply -f k8s-test.yaml 
deployment.apps/k8s-test created

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

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

серия статей

Добро пожаловать в публичный аккаунт (код как поэзия):

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