マイクロサービスのお勉強
特に、最後の "The Scale Cube" はとてもいいフレームワーク(思考法的なほうの意味)だと思う。 こんなヤツ。
Kubernetesチュートリアル
Kubernetesのチュートリアルやってみました。
https://kubernetes.io/docs/tutorials/kubernetes-basics/
上記チュートリアルでは、すでに用意されてるMinikube環境+Katacoda(web上で使えるターミナル)を使う構成になってますが、僕は自分の勉強も含め、自分のMac上で、手元のターミナルとMinikubeを使ってやりました。
要するに、こちらでやられてるのと全く一緒です。
https://dev.classmethod.jp/cloud/kubernetes-tutorial-1/
Interactive Tutorial - Creating a Cluster
$ minikube version minikube version: v0.28.2 $ minikube start けっこう時間かかります $ kubectl version Client Version: version.Info{Major:"1", Minor:"11", GitVersion:"v1.11.2", GitCommit:"bb9ffb1654d4a729bb4cec18ff088eacc153c239", GitTreeState:"clean", BuildDate:"2018-08-08T16:30:58Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"darwin/amd64"} Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
Interactive Tutorial - Deploying an App
$ kubectl get nodes --help $ kubectl get nodes NAME STATUS ROLES AGE VERSION minikube Ready master 4h v1.10.0 $ kubectl run kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1 --port=8080 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 1 1 1 1 3s $ kubectl proxy $ curl http://localhost:8001/version $ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') $ curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/
Interactive Tutorial - Exploring Your App
$ kubectl get pods $ kubectl describe pods $ kubectl proxy $ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}') $ curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME/proxy/ $ kubectl logs $POD_NAME $ kubectl exec $POD_NAME env $ kubectl exec -ti $POD_NAME bash # cat server.js # curl localhost:8080 # exit
Interactive Tutorial - Exposing Your App
$ kubectl get pods $ kubectl get services NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 22h $ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 $ kubectl get services $ kubectl describe services/kubernetes-bootcamp $ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') $ curl $(minikube ip):$NODE_PORT Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-mb9b8 | v=1 $ kubectl describe deployment ... Labels: run=kubernetes-bootcamp ... $ kubectl get pods -l run=kubernetes-bootcamp NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h $ kubectl label pod kubernetes-bootcamp-5c69669756-mb9b8 app=v1 $ kubectl get pods -l app=v1 NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h $ kubectl describe pods ... Labels: app=v1 pod-template-hash=1725225312 run=kubernetes-bootcamp ... $ kubectl delete service -l run=kubernetes-bootcamp $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 23h $ kubectl exec -ti kubernetes-bootcamp-5c69669756-mb9b8 curl localhost:8080 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-mb9b8 | v=1
Interactive Tutorial - Scaling Your App
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 1 1 1 1 18h $ kubectl scale deployments/kubernetes-bootcamp --replicas=4 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 4 4 4 4 18h $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE kubernetes-bootcamp-5c69669756-48p5b 1/1 Running 0 1m 172.17.0.5 minikube kubernetes-bootcamp-5c69669756-7p2l5 1/1 Running 0 1m 172.17.0.7 minikube kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h 172.17.0.2 minikube kubernetes-bootcamp-5c69669756-slf49 1/1 Running 0 1m 172.17.0.6 minikube $ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-5c69669756-48p5b 1/1 Running 0 1m kubernetes-bootcamp-5c69669756-7p2l5 1/1 Running 0 1m kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h kubernetes-bootcamp-5c69669756-slf49 1/1 Running 0 1m $ kubectl describe deployments/kubernetes-bootcamp ... Replicas: 4 desired | 4 updated | 4 total | 4 available | 0 unavailable ... $ kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}' Error from server (NotFound): services "kubernetes-bootcamp" not found $ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080 $ kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}' 32469 $ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') $ curl $(minikube ip):$NODE_PORT Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-mb9b8 | v=1 $ curl $(minikube ip):$NODE_PORT $ curl $(minikube ip):$NODE_PORT $ curl $(minikube ip):$NODE_PORT Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-mb9b8 | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-slf49 | v=1 Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-48p5b | v=1 ... $ kubectl scale deployments/kubernetes-bootcamp --replicas=2 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 2 2 2 2 18h $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE kubernetes-bootcamp-5c69669756-48p5b 1/1 Running 0 8m 172.17.0.5 minikube kubernetes-bootcamp-5c69669756-7p2l5 1/1 Terminating 0 8m 172.17.0.7 minikube kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h 172.17.0.2 minikube kubernetes-bootcamp-5c69669756-slf49 1/1 Terminating 0 8m 172.17.0.6 minikube ちょっと待つと、 $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE kubernetes-bootcamp-5c69669756-48p5b 1/1 Running 0 9m 172.17.0.5 minikube kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 18h 172.17.0.2 minikube
Interactive Tutorial - Updating Your App
$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 2 2 2 2 22h $ kubectl get pods $ kubectl describe pods $ kubectl get svc $ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}') $ curl $(minikube ip):$NODE_PORT Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-5c69669756-48p5b | v=1 $ kubectl scale deployments/kubernetes-bootcamp --replicas=4 $ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE kubernetes-bootcamp-5c69669756-48p5b 1/1 Running 0 3h 172.17.0.5 minikube kubernetes-bootcamp-5c69669756-fshmp 1/1 Running 0 3s 172.17.0.6 minikube kubernetes-bootcamp-5c69669756-j5bxj 1/1 Running 0 3s 172.17.0.7 minikube kubernetes-bootcamp-5c69669756-mb9b8 1/1 Running 1 22h 172.17.0.2 minikube $ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2 $ kubectl get pods $ kubectl describe services/kubernetes-bootcamp $ kubectl get pods -o wide $ kubectl rollout status deployment/kubernetes-bootcamp $ kubectl describe pods $ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10 $ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE kubernetes-bootcamp 4 5 2 3 22h $ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-5f76cd7b94-7rrg7 0/1 ImagePullBackOff 0 33s kubernetes-bootcamp-5f76cd7b94-sdvbr 0/1 ErrImagePull 0 33s kubernetes-bootcamp-7799cbcb86-5mblm 0/1 Terminating 0 14m kubernetes-bootcamp-7799cbcb86-6pwd7 1/1 Running 0 21m kubernetes-bootcamp-7799cbcb86-7w9zk 1/1 Running 0 21m kubernetes-bootcamp-7799cbcb86-gjbrb 1/1 Running 0 21m ダメなので... $ kubectl rollout status deployment/kubernetes-bootcamp $ kubectl get pods NAME READY STATUS RESTARTS AGE kubernetes-bootcamp-7799cbcb86-6pwd7 1/1 Running 0 23m kubernetes-bootcamp-7799cbcb86-7w9zk 1/1 Running 0 23m kubernetes-bootcamp-7799cbcb86-gjbrb 1/1 Running 0 23m kubernetes-bootcamp-7799cbcb86-jt8zn 1/1 Running 0 36s $ kubectl describe pods
gitの過去コミットメッセージの修正
いつも覚えてなくて検索するので、メモ。
$ git rebase -i HEAD~5 "pick" -> "edit" $ git commit --amend $ git rebase --continue
こちら参考(というかそのまま)にさせていただきました。
Kubernetes Tutorials
Kubernetesのお勉強。
- https://dev.classmethod.jp/cloud/kubernetes-tutorial-1/
- https://dev.classmethod.jp/cloud/minikube/
と、本家チュートリアル
- https://kubernetes.io/docs/tutorials/
----
こっちに、実際にやったコマンドも貼っときました。
Dependency Inversion Principle
Dependency Inversion Principle とな。
Automationとか、DevOpsとか
最近読んだwebのテキストをメモっといてみます。
英語です。読むのに時間かかりました。
主に、O'reillyのニュースレターに載ってたものたちです。
- https://dzone.com/guides/automated-testing-your-end-to-end-ecosystem
- https://dzone.com/guides/devops-culture-and-process
- https://dzone.com/articles/the-cicd-infrastructure-my-recommended-tools
- https://opensource.com/article/18/7/sysadmin-tasks-ansible
- https://medium.com/@vineetcloudops/ansible-from-scratch-9e466111d47b
- https://medium.com/@soumyadipde/docker-enterprise-edition-the-good-the-bad-the-ugly-the-fair-9a78ca532c25
- https://www.nginx.com/resources/library/container-networking-docker-kubernetes/
- https://open.microsoft.com/2018/04/23/5-reasons-you-should-be-doing-container-native-development/
- https://www.oreilly.com/ideas/how-to-think-about-ai-and-machine-learning-technologies-and-their-roles-in-automation
- https://medium.freecodecamp.org/best-programming-languages-to-learn-in-2018-ultimate-guide-bfc93e615b35
- http://shop.oreilly.com/product/9780988262508.do
- https://thenewstack.io/how-to-do-microservices-integration-testing-in-the-cloud/
- https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html
8/21追加