tjtjtjのメモ

自分のためのメモです

kubernetes 学習 練習プロジェクトのデプロイ

ここに練習helloプロジェクト作ったので、k8s にデプロイしてみる https://github.com/tjtjtj/kbhello

プライベートリポジトリ起動

プライベートリポジトリ起動

# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
# docker run -d -p 5000:5000 registry:2
206d41978282a4376333eb7e4df100ad44e49a00a2ee480ca05fac10f60c5132
# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
206d41978282        registry:2          "/entrypoint.sh /etc…"   8 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   dreamy_archimedes

カタログ確認

# curl localhost:5000/v2/_catalog
{"repositories":[]}

プライベートリポジトリにコンテナイメージ登録

git clone, ビルド, イメージ作成, タギング, docker-login, タグpush ... メンドクサー

git clone https://github.com/tjtjtj/kbhello.git
cd kbhello
chmod 744 gradlew
./gradlew build
docker build -t kbhello:1 .
docker tag kbhello:1 192.168.0.1:5000/kbhello:1
docker login 192.168.0.1:5000
docker push 192.168.0.1:5000/kbhello:1

イメージ確認

# docker image ls
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
192.168.0.1:5000/kbhello   1                   e6f5c6b7264b        5 minutes ago       121MB
kbhello                    1                   e6f5c6b7264b        5 minutes ago       121MB

カタログ確認

# curl localhost:5000/v2/_catalog
{"repositories":["kbhello"]}

デプロイ

kbhello-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kbhello-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: kbhello
  template:
    metadata:
      labels:
        app: kbhello
    spec:
      containers:
      - name: kbhello
        image: 192.168.0.1:5000/kbhello:1
        ports:
        - containerPort: 8080

デプロイ

$ kubectl apply -f kbhello-deployment.yaml
deployment.apps/kbhello-deployment created
$ kubectl get pod
NAME                                  READY   STATUS              RESTARTS   AGE
kbhello-deployment-7cd47cbb58-f7hdq   0/1     ContainerCreating   0          3s
kbhello-deployment-7cd47cbb58-fhb4x   0/1     ContainerCreating   0          3s
$ kubectl get pod
NAME                                  READY   STATUS    RESTARTS   AGE
kbhello-deployment-7cd47cbb58-f7hdq   1/1     Running   0          8s
kbhello-deployment-7cd47cbb58-fhb4x   1/1     Running   0          8s
$ kubectl get pod

ロードバランサ作成

$ kubectl expose deployment kbhello-deployment --type=LoadBalancer --name=kbhello-service
service/kbhello-service exposed
$ kubectl get service
NAME              TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
kbhello-service   LoadBalancer   10.98.159.32   <pending>     8080:31872/TCP   16s

動作確認

$ curl 10.98.159.32:8080
Hello Docker World
$ curl 10.98.159.32:8080
Hello Docker World

OK これをベースにいろいろやってみよう。