Учебное пособие по развертыванию приложений Kubernetes
Адрес статьи:blog.Park Ruiqing.com/2019/09/28/…
предисловие
Эта статья поможет читателям узнать, как развертывать приложения в Kubernetes, в том числе: как развертывать приложения, объяснять файлы выпуска, упаковывать и выпускать локальные проекты и т. д.
Прочитав эту статью, вы получите:
- Узнайте, как развертывать приложения в k8s
- Как упаковать образ Docker и загрузить его в приватный репозиторий
Для прочтения этой статьи вам понадобится:
- Ознакомьтесь с командами Linux.
- Существует среда Kubernetes (см."Сборка K8S с нуля с официальной документацией"Разверните тестовую среду Kubernetes локально)
Понимание файлов описания
Во-первых, мы разбираемся с файлом описания, развертывая 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
Если эта статья была вам полезна, ставьте лайк ( ̄▽ ̄)"
использованная литература
серия статей
- Kubernetes (1) Следуйте официальной документации, чтобы собрать K8S с нуля.
- Развертывание приложений Kubernetes (2)
- Kubernetes (3) Как получить доступ к сервисам извне
Добро пожаловать в публичный аккаунт (код как поэзия):
Эта статья была опубликована вБлог Пак Жуцин, перепечатка для некоммерческого использования разрешена, но перепечатка должна сохранить оригинального автораПарк Жуйцини ссылка:blog.piaoruiqing.com. Если есть какие-либо переговоры или сотрудничество с точки зрения авторизации, пожалуйста, свяжитесь с адресом электронной почты:piaoruiqing@gmail.com.