вводить
Несколько статей впереди представлены с уровня концепцииKubernetes
Какова его внутренняя структура. А также установить на компьютерMinikube
--имеет один узелKubernetes
Кластер, позволяющий нам начать опыт на нашем собственном компьютереKubernetes
. В сегодняшней статье я постараюсь сделать его с вами шаг за шагом.Go
ПрограммыDocker
образ, разверните его наMinikuebe
запускать на.今天的文章不需要什么基础,Kubernetes
Начинающие друзья первыми учатся водить вместе.
код приложения
мы используемGo
написать простойHTTP Server
,Server
прослушивание порта 3000 содержит"/"
и"/health_check"
Две маршруты, сегодня фокус статьи не в том, как использоватьGo
программа развития так что всеHello World
Код уровня больше объяснять не буду, просто посмотрите код.
package main
import (
"fmt"
"net/http"
)
func index(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Hello World</h1>")
}
func check(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "<h1>Health check</h1>")
}
func main() {
http.HandleFunc("/", index)
http.HandleFunc("/health_check", check)
fmt.Println("Server starting...")
http.ListenAndServe(":3000", nil)
}
Сделать образ программы
Затем начните создавать код, содержащий код приложения.Docker
зеркало. оdocker
Как пользоваться и как писатьDockerfile
, вы можете ответить на ключевые слова на официальном аккаунтеdockerПолучить полные справочные примечания.
dockerfile
В корневой каталог приложения добавьте файл с именемDockerfile
файл, добавьте в файл следующие инструкции:
FROM golang:alpine
RUN mkdir /app
COPY . /app
WORKDIR /app
RUN go build -o main .
CMD ["/app/main"]
построить образ
существуетDockerfile
Выполнить в каталоге, где он находитсяdocker build
построить образ
➜ docker build -t go-app-img .
docker
будет основываться наDockerfile
Инструкции в зеркале сборки, весь процесс сборки аналогичен следующему:
➜ docker build -t go-app-img .
Sending build context to Docker daemon 9.216kB
Step 1/6 : FROM golang:alpine
alpine: Pulling from library/golang
df20fa9351a1: Pull complete
ed8968b2872e: Pull complete
a92cc7c5fd73: Pull complete
9e0cccf56431: Pull complete
cbe0275821fc: Pull complete
Digest: sha256:6042b9cfb4eb303f3bdcbfeaba79b45130d170939318de85ac5b9508cb6f0f7e
Status: Downloaded newer image for golang:alpine
---> 3289bf11c284
Step 2/6 : RUN mkdir /app
---> Running in b34dccb1f3de
Removing intermediate container b34dccb1f3de
---> 1fa1a1c21aa2
Step 3/6 : COPY . /app
---> 815660da9d1a
Step 4/6 : WORKDIR /app
---> Running in 49dc25fe6bb7
Removing intermediate container 49dc25fe6bb7
---> 14776702ccf7
Step 5/6 : RUN go build -o main .
---> Running in 3bd4dc1e2bf6
Removing intermediate container 3bd4dc1e2bf6
---> 59aa7f96ee42
Step 6/6 : CMD ["/app/main"]
---> Running in 6309f604d662
Removing intermediate container 6309f604d662
---> 023baffdcb28
Successfully built 023baffdcb28
Successfully tagged go-app-img:latest
Проверьте образ
Этот шаг на самом деле можно пропустить, но для того, чтобы убедиться, что полученное изображение не представляет проблемы, мы передаемdocker run
Команда для запуска контейнера с этим образом для проверки.
➜ docker run -d -p 3333:3000 --rm --name go-app-container go-app-img
Здесь мы указываемdocker
Зеркалоgo-app-img
Запустите контейнер, установите порт хоста3333
Привязать к внутреннему порту контейнера3000
, запустить контейнер в фоновом режиме (-d), назвать контейнерgo-app-container
и автоматически удалить контейнер (--rm) после завершения работы контейнера.
Открыть ввод в браузереlocalhost:3333
Вывод посещенной страницы будет:
Нажмите зеркало в Dockerhub
После того, как тестовое изображение в порядке, нажмите изображение наDockerHub
,Тем временемKubernetes
При развертывании приложения оно будет основано на указанном имени образа изDockerHub
Поднимите зеркало (источник зеркала настраивается, не обязательноDockerHub
, который может быть частным зеркальным репозиторием).
➜ docker build -t kevinyan001/kube-go-app .
...
➜ docker push kevinyan001/kube-go-app
...
использоватьDockerfile
Пересоберите образ и укажите имя репозитория образа. После завершения сборки загрузите образ наDockerHub
начальство.
На имя склада вышеkevinyan001
мой собственныйDockerHub
учетной записи, вы можете напрямую использовать следующую команду, чтобы получить мое зеркало для использования, но все же рекомендуется, чтобы каждый сделал свое собственное зеркало.
docker pull kevinyan001/kube-go-app:latest
Приложение для развертывания Kubernetes
Чтобы развернуть приложение, вам нужно сначала определить ожидаемое состояние, т.yaml
Подайте заявление о конкретномKubernetes
Различные ожидаемые состояния объекта. тогда пустьKubernetes
После создания объекта он всегда будет переводить текущее состояние кластера в ожидаемое состояние (например, если узел выйдет из строя, будет запущен новый узел, чтобы заменить отказавший узел). После развертывания приложения нам также необходимо пройтиService
Откройте приложение снаружи, чтобы оно могло получить доступKubernetes
приложения в кластере.
Давайте выполним эти три шага шаг за шагом.
Прежде чем мы начнем, нам нужно начатьMinikube
minikube start
Если вы не установили, можете обратиться к."Minikube — кластер Kubernetes, работающий на ноутбуке"Этапы установки в
Определите ожидаемое состояние
В файле манифеста развертывания (deployment.yaml
) определяют ожидаемое состояние в
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-go-app
spec:
replicas: 1
selector:
matchLabels:
app: go-app
template:
metadata:
labels:
app: go-app
spec:
containers:
- name: go-app-container
image: kevinyan001/kube-go-app
resources:
limits:
memory: "128Mi"
cpu: "500m"
ports:
- containerPort: 3000
Kubernetes Deployment
объект (файл манифестаkind
Где указано) представляют приложения, работающие в кластере. Документ также указывает необходимость копии приложения для запуска (replicas
), а также имя запущенного контейнера, образ контейнера, размер ресурса и другую информацию.
Deployment
даKubernetes
Один тип объекта, есть много других объектов, соответствующихKubernetes
различные виды ресурсов.
Развернуть приложение
используя вышеописанноеdeployment.yaml
СоздайтеDeployment
объект для запускаGo
Контейнер приложения:
➜ kubectl create -f deployment.yaml
deployment.apps/my-go-app created
➜ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-go-app 1/1 1 1 24s
➜ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-go-app-5bb8767f6d-2pdtk 1/1 Running 0 43s
Разоблачить приложение
После развертывания приложения доступ к нему извне невозможен.Deployment
Объект запускает приложение какKubernetes
один изService
Зарубежная экспозиция.
➜ kubectl expose deployment my-go-app --type=NodePort --name=go-app-svc --target-port=3000
service/go-app-svc exposed
➜ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
go-app-svc NodePort 10.104.190.231 <none> 3000:31425/TCP 40h
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 6d13h
➜ minikube ip
192.168.64.4
пройти черезkubectl get svc
ЗапросService
хост доступен31425
порт сопоставлен сKubernetes
контейнер, в котором запущено приложение3000
порт. использовать в браузереKubernetes
Кластер IP плюсNodePort
получить доступKubernetes
развернутыйGo
применение.
Откройте браузер через192.168.64.4:31425
(На основе IP и порта, найденных в вашей собственной практике) Результаты доступа к двум маршрутам, определенным приложением, следующие:
Суммировать
Сегодняшняя статья кратко описывает развертывание приложений наKubernetes
кластерные шаги,Kubernetes
Существует множество объектов для представления различных ресурсов в собственных, сегодня развернутых приложениях.Deployment
является одним из них,kubectl
будет основываться на.yaml
Запрос информации о конфигурации в файлеKubernetes
изapiServer
Чтобы создавать различные объекты, нам нужно продолжить изучение этих часто используемых объектов.Kubernetes
объект. Поскольку я только что начал учиться, неизбежно, что в выражении есть неточности, пожалуйста, прости меня.