ためすう
Vue.js で component を id 指定する
2019-11-04やったこと
Vue.js で component を指定するとき html の id 属性を利用して指定します。
確認環境
Console Log
Vue.version
"2.5.17"
調査
index.html
<!DOCTYPE html>
<html>
<body>
<div id="app">
<hoge></hoge>
</div>
<script src="https://unpkg.com/vue@2.5.17"></script>
<script type="text/x-template" id="hoge">
<p>hogehoge</p>
</script>
<script>
Vue.component('hoge', {
template: '#hoge'
})
new Vue({
el: '#app'
})
</script>
</body>
</html>
参考
Vue で ルーティングを設定する
2019-11-04やったこと
Vue.js でルーティングを設定します。
確認環境
Console Log
Vue.version
"2.5.17"
VueRouter.version
"3.0.1"
調査
<!DOCTYPE html>
<html>
<body>
<div id="app">
<router-link to="/sample1">sample1</router-link>
<router-link to="/sample2">sample2</router-link>
<router-view></router-view>
</div>
<script src="https://unpkg.com/vue@2.5.17"></script>
<script src="https://unpkg.com/vue-router@3.0.1"></script>
<script>
var router = new VueRouter({
routes: [
{
path: '/sample1',
component: {
template: '<div>sample1 page</div>'
}
},
{
path: '/sample2',
component: {
template: '<div>sample2 page</div>'
}
},
]
})
var app = new Vue({
router: router
}).$mount('#app')
</script>
</body>
</html>
参考
- Vue.js 入門
- ルーティング — Vue.js
Nuxt.js でアプリケーションを立ち上げるまで
2019-11-03やったこと
Nuxt.js をインストールして、アプリを立ち上げてみます。
調査
yarn のインストール
yarn は JavaScript のパッケージマネージャです。
$ brew install yarn
$ yarn --version
1.19.1
Vue Cli のインストール
$ npm i -g @vue/cli @vue/cli-init
サンプルアプリ作成
$ vue init nuxt-community/starter-template sample
$ cd sample
$ yarn
$ npm run dev
参考
- [Nuxt.js ビギナーズガイド]
Kubernetes の基本を学ぶ (ローリングアップデート)
2019-11-02やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
ローリングアップデート
ローリングアップデートでは、Podインスタンスを新しいインスタンスで段階的にアップデートすることで、ダウンタイムなしでDeploymentをアップデートできます。
チュートリアル
$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.apps/kubernetes-bootcamp image updated
$ kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP: 10.101.175.64
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30981/TCP
Endpoints: 172.17.0.10:8080,172.17.0.9:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT=30981
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-b4d9f565-774l8 | v=2
$ kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out
参考
Kubernetes の基本を学ぶ (スケーリング)
2019-10-31やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
スケーリング
Deploymentをスケールアウトすると、新しいPodが作成され、使用可能なリソースを持つNodeにスケジュールされます。
チュートリアル
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 1/1 1 1 3h37m
$ kubectl scale deployments/kubernetes-bootcamp --replicas=4
deployment.apps/kubernetes-bootcamp scaled
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 4/4 4 4 3h37m
$ kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP: 10.101.175.64
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30981/TCP
Endpoints: 172.17.0.10:8080,172.17.0.7:8080,172.17.0.8:8080 + 1 more...
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
$ echo NODE_PORT=$NODE_PORT
NODE_PORT=30981
$ curl $(minikube ip):$NODE_PORT
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69fbc6f4cf-5d5dm | v=1
参考
Kubernetes の基本を学ぶ (Service)
2019-10-29やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
Service
ワーカーのNodeが停止すると、そのNodeで実行されているPodも失われます。
各Podには固有のIPアドレスがありますが、それらのIPは、Serviceなしではクラスタの外部に公開されません。Serviceによって、アプリケーションはトラフィックを受信できるようになります。
チュートリアル
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d16h
$ kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
service/kubernetes-bootcamp exposed
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d16h
kubernetes-bootcamp NodePort 10.101.175.64 <none> 8080:30981/TCP 18s
$ kubectl describe services/kubernetes-bootcamp
Name: kubernetes-bootcamp
Namespace: default
Labels: app=kubernetes-bootcamp
Annotations: <none>
Selector: app=kubernetes-bootcamp
Type: NodePort
IP: 10.101.175.64
Port: <unset> 8080/TCP
TargetPort: 8080/TCP
NodePort: <unset> 30981/TCP
Endpoints: 172.17.0.2:8080
Session Affinity: None
External Traffic Policy: Cluster
Events: <none>
$ export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
echo NODE_PORT=$NODE_PORT
$ curl $(minikube ip):$NODE_PORT
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
echo Name of the Pod: $POD_NAME
$ kubectl label pod $POD_NAME app=v1 --overwrite
$ kubectl get pods -l app=v1
NAME READY STATUS RESTARTS AGE
kubernetes-bootcamp-69fbc6f4cf-rfvs5 1/1 Running 0 3h32m
参考
Kubernetes の基本を学ぶ (Pod と Node)
2019-10-27やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
Pod
- 共有ストレージ(ボリューム)
- ネットワーキング(クラスタに固有のIPアドレス)
- コンテナのイメージバージョンや使用するポートなどの、各コンテナをどう動かすかに関する情報
Node
Podは常にNode上で動作します。NodeはKubernetesではワーカーマシンであり、クラスタによって仮想、物理マシンのどちらであってもかまいません。
チュートリアル
$ kubectl describe pods
※ 長いので出力結果は省略
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-69fbc6f4cf-rfvs5
$ kubectl exec $POD_NAME env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=kubernetes-bootcamp-69fbc6f4cf-rfvs5
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
KUBERNETES_SERVICE_HOST=10.96.0.1
KUBERNETES_SERVICE_PORT=443
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
KUBERNETES_PORT_443_TCP_PROTO=tcp
NPM_CONFIG_LOGLEVEL=info
NODE_VERSION=6.3.1
HOME=/root
コンテナに入る
$ kubectl exec -ti $POD_NAME bash
@コンテナ
# curl localhost:8080
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-69fbc6f4cf-rfvs5 | v=1
ログ確認
$ kubectl logs $POD_NAME
Kubernetes Bootcamp App Started At: 2019-10-27T06:22:01.080Z | Running On: kubernetes-bootcamp-69fbc6f4cf-rfvs5
Running On: kubernetes-bootcamp-69fbc6f4cf-rfvs5 | Total Requests: 1 | App Uptime: 2741.92 seconds | Log Time: 2019-10-27T07:07:43.000Z
参考
Kubernetes の基本を学ぶ (Deployment)
2019-10-27やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
Deployment
Kubernetesにあなたのアプリケーションのインスタンスを作成し、更新する方法を指示します。
マシンの故障やメンテナンスに対処するためのセルフヒーリングの仕組みを提供しています。
Deploymentを作成するときは、アプリケーションのコンテナイメージと実行するレプリカの数を指定する必要があります。
チュートリアル
$ kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
deployment.apps/kubernetes-bootcamp created
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
kubernetes-bootcamp 0/1 1 0 11s
proxy を立ち上げる
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
$ curl http://localhost:8001/version
{
"major": "1",
"minor": "16",
"gitVersion": "v1.16.0",
"gitCommit": "2bd9643cee5b3b3a5ecbd3af49d09018f0773c77",
"gitTreeState": "clean",
"buildDate": "2019-09-18T14:27:17Z",
"goVersion": "go1.12.9",
"compiler": "gc",
"platform": "linux/amd64"
}
pod name を表示する
$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
$ echo Name of the Pod: $POD_NAME
Name of the Pod: kubernetes-bootcamp-69fbc6f4cf-rfvs5
参考
Kubernetes の基本を学ぶ (クラスタの作成)
2019-10-27やったこと
Kubernetes のチュートリアルをやります。
Mac のローカル環境で試します。
調査
Kubernetesクラスタ
- マスターはクラスタの管理を担当します。
- Nodeは、Kubernetesクラスタのワーカーマシンとして機能するVMまたは物理マシンです
チュートリアル
minikube version 確認
$ minikube version
minikube version: v1.4.0
commit: 7969c25a98a018b94ea87d949350f3271e9d64b6
$ minikube start
🎉 minikube 1.5.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.5.0
💡 To disable this notice, run: 'minikube config set WantUpdateNotification false'
🙄 minikube v1.4.0 on Darwin 10.13.6
💡 Tip: Use 'minikube start -p <name>' to create a new cluster, or 'minikube delete' to delete this one.
🏃 Using the running virtualbox "minikube" VM ...
⌛ Waiting for the host to be provisioned ...
🐳 Preparing Kubernetes v1.16.0 on Docker 18.09.9 ...
🔄 Relaunching Kubernetes using kubeadm ...
⌛ Waiting for: apiserver proxy etcd scheduler controller dns
🏄 Done! kubectl is now configured to use "minikube"
kubectl version 確認
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.2", GitCommit:"c97fe5036ef3df2967d086711e6c0c405941e14b", GitTreeState:"clean", BuildDate:"2019-10-15T19:18:23Z", GoVersion:"go1.12.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.0", GitCommit:"2bd9643cee5b3b3a5ecbd3af49d09018f0773c77", GitTreeState:"clean", BuildDate:"2019-09-18T14:27:17Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"}
$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.102:8443
KubeDNS is running at https://192.168.99.102:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready master 2d15h v1.16.0
参考
Minikube チュートリアルをやってみる
2019-10-25やったこと
Hello Minikube のチュートリアルをやります。
Mac のローカル環境で試します。
調査
Minicube クラスタ作成
$ minikube start
$ minikube dashboard
Deployment (Pod) 作成
$ kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
deployment.apps/hello-node created
Deployment
Kubernetesの Deployment はPodの状態を確認し、Podのコンテナが停止した場合には再起動します。
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
hello-node 0/1 1 0 9s
pods
KubernetesのPod は、コンテナの管理やネットワーキングの目的でまとめられた、1つ以上のコンテナのグループです。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hello-node-7676b5fb8d-shsvh 0/1 ContainerCreating 0 41s
Service 作成
コンテナを仮想ネットワークの外部からアクセスできるようにするため、サービスを作成する必要があります。
$ kubectl expose deployment hello-node --type=LoadBalancer --port=8080
service/hello-node exposed
確認
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-node LoadBalancer 10.109.94.113 <pending> 8080:32678/TCP 24s
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 36m
ブラウザが開きます
$ minikube service hello-node
|-----------|------------|-------------|-----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|------------|-------------|-----------------------------|
| default | hello-node | | http://192.168.99.102:32678 |
|-----------|------------|-------------|-----------------------------|
🎉 Opening kubernetes service default/hello-node in default browser...
おまけ
Katacoda はブラウザから Docker や Kubernetes を試すことが出来ます。