kubernetesに入門してみる
spring cloudで遊んでみよーとおもったので、まずはkubernetesから触ってみることにした。
触ってきたメモ的な感じで残してく。
環境
Kubernetesを有効化
DockerのSettingsを開いてKubernetesからぽちっと有効化してあげる
Applyするとインストールが始まるので終わるまでしばらく待つ
終わったらとりあえずkubectlコマンドが使えるはずなので kubectl version
あたりを叩いて確認するとよき
動かしてみる
とりあえず簡単なSpring Bootアプリケーションをデプロイしてみる。
こんなかんじのアプリケーションを作って
@SpringBootApplication @Controller public class HelloApplication { public static void main(String[] args) { SpringApplication.run(HelloApplication.class, args); } @GetMapping @ResponseBody public String hello() { return "hello " + LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME); } }
Jibを使ってイメージを作る
デフォルトのベースイメージだとJDK12サポートしてないからベースイメージにはopenjdk:12を使うよ
あとたくさんアプリ作りそうなのでマルチプロジェクト構成にしておく
plugins { id 'java' id 'org.springframework.boot' version '2.1.8.RELEASE' apply false id 'io.spring.dependency-management' version '1.0.8.RELEASE' apply false id 'com.google.cloud.tools.jib' version '1.5.1' apply false } repositories { jcenter() } subprojects { apply plugin: 'org.springframework.boot' apply plugin: 'io.spring.dependency-management' apply plugin: 'com.google.cloud.tools.jib' sourceCompatibility = 12 def defaultEncoding = 'UTF-8' [AbstractCompile, Javadoc].each { tasks.withType(it).each { it.options.encoding = defaultEncoding } } repositories { jcenter() } jib { to { image = "net.orekyuu/" + project.name } from { image = "openjdk:12" // JDK12を使いたい場合は明示的にベースイメージ設定しておこう } } }
gradlew :hello:jibDockerBuild
を叩いてイメージを作る。Jib便利~。
D:\repos\spring-illust-service>gradlew :hello:jibDockerBuild Containerizing application to Docker daemon as net.orekyuu/hello... The base image requires auth. Trying again for openjdk:12... Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, net.orekyuu.hello.HelloApplication] Built image to Docker daemon as net.orekyuu/hello Executing tasks: [==============================] 100.0% complete BUILD SUCCESSFUL in 5m 52s 2 actionable tasks: 1 executed, 1 up-to-date
ビルドできたっぽいのでコンテナを動かしてみて動くことを確認
docker run -p 8080:8080 net.orekyuu/hello
ブラウザでlocalhost:8080を見るとちゃんとメッセージが見れたのでヨシ!
docker-compose.ymlでデプロイする
compose-on-kubernetesとやらでkubernetesにdocker-compose.ymlの定義に従ってコンテナをデプロイできるっぽいので使ってみる。とりあえず動かしたいしね。
とりあえずhelloアプリだけ起動するようにdocker-compose.ymlを用意。
version: '3.7' services: hello-app: image: net.orekyuu/hello:latest ports: - 8080:8080
つぎにデプロイはdocker stack deployでできるらしい。docker-swarmと一緒だけどorchestratorオプションでkubernetesを指定できるらしい。なるほど。
stack名はhelloでデプロイ
D:\repos\spring-illust-service>docker stack deploy --orchestrator=kubernetes -c docker-compose.yml hello Waiting for the stack to be stable and running... hello-app: Pending [pod status: 0/1 ready, 1/1 pending, 0/1 failed]
起動待ちがやけに長い…?
D:\repos\spring-illust-service>kubectl get all NAME READY STATUS RESTARTS AGE pod/hello-app-557fc5fb78-b28md 0/1 ImagePullBackOff 0 5m33s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/hello-app ClusterIP None <none> 55555/TCP 5m33s service/hello-app-published LoadBalancer 10.99.53.170 localhost 8080:32717/TCP 5m32s service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 71m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/hello-app 0/1 1 0 5m33s NAME DESIRED CURRENT READY AGE replicaset.apps/hello-app-557fc5fb78 1 1 0 5m33s
pod/hello-app-...のSTATUSがImagePullBackOffのままずっと動いてないっぽい。
おそらくローカルのイメージが見えてなくてpullをずっと待ってるのかな。明日は適当なレジストリ立てて試してみよ~