{"id":3984,"date":"2019-04-08T12:29:17","date_gmt":"2019-04-08T03:29:17","guid":{"rendered":"https:\/\/greentown.tokyo\/?p=3984"},"modified":"2019-04-08T12:29:17","modified_gmt":"2019-04-08T03:29:17","slug":"kubernetes-bootcamp2","status":"publish","type":"post","link":"https:\/\/greentown.tokyo\/?p=3984","title":{"rendered":"kubernetes-bootcamp\u3092\u8a66\u3059\uff08\u30a2\u30d7\u30ea\u516c\u958b\u7de8\uff09"},"content":{"rendered":"<p>Kubernetis\u304a\u52c9\u5f37\u306e\u7d9a\u304d\u3002<\/p>\n<h2>Kubernetes Service<\/h2>\n<p>Pod\u306e\u8ad6\u7406\u30bb\u30c3\u30c8\u3068Pod\u305f\u3061\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u5b9a\u7fa9\u3059\u308b\u62bd\u8c61\u6982\u5ff5\u3002<\/p>\n<p>&nbsp;<\/p>\n<h3>\u6982\u8981<\/h3>\n<ul>\n<li>Pod\u306b\u306f\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u304c\u3042\u308b\u3002<\/li>\n<li>\u30ef\u30fc\u30ab\u30fc\u306eNode\u304c\u3068\u307e\u308b\u3068\u3001Pod\u3082\u6d88\u6ec5\u3002<\/li>\n<li>\u6d88\u3048\u3061\u3083\u3063\u305f\u3089\u3001\u30af\u30e9\u30b9\u30bf\u306e\u72b6\u614b\u3092\u623b\u3059\u305f\u3081\u306b\u3001\u30ec\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30b3\u30f3\u30c8\u30ed\u30fc\u30e9\u30fc\u304c\u65b0\u3057\u3044Pod\u3092\u4f5c\u6210\u3057\u3066\u304f\u308c\u308b<\/li>\n<li>Pod\u9593\u306e\u7d50\u5408\u3092\u3057\u3066\u304f\u308c\u308b<\/li>\n<li>YAML\u304bJson\u3067\u5b9a\u7fa9\u3059\u308b\uff08YAML\u63a8\u5968\uff09<\/li>\n<li>Service\u304c\u306a\u3044\u3068Pod\u306eIP\u306f\u5916\u90e8\u306b\u516c\u958b\u3055\u308c\u306a\u3044<\/li>\n<li>\u516c\u958b\u65b9\u6cd5\u306f\u3044\u308d\u3044\u308d\u3042\u308b<\/li>\n<li>Service\u306f\u4e00\u9023\u306ePod\u306b\u30c8\u30e9\u30d5\u30a3\u30c3\u30af\u3092\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\uff08\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306a\u3069\u306e\u4f9d\u5b58Pod\u9593\u306e\u691c\u51fa\u306a\u3069\uff09<\/li>\n<\/ul>\n<h6>ClusterIP\uff08\u65e2\u5b9a\u5024\uff09<\/h6>\n<ul>\n<li>\u30af\u30e9\u30b9\u30bf\u5185\u90e8\u306eIP\u3067Service\u3092\u516c\u958b\u3059\u308b<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h6>NodePort-NAT<\/h6>\n<ul>\n<li>ClasuterIP\u306e\u30b9\u30fc\u30d1\u30fc\u30bb\u30c3\u30c8<\/li>\n<li>\u30af\u30e9\u30b9\u30bf\u5185\u306e\u9078\u629e\u3055\u308c\u305f\u5404Node\u306e\u540c\u3058\u30dd\u30fc\u30c8\u306bService\u3092\u516c\u958b\u3059\u308b<\/li>\n<li>&lt;NodeIP&gt;:&lt;NodePort&gt; \u3067\u30af\u30e9\u30b9\u30bf\u5916\u90e8\u304b\u3089\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h6>LaodBalancer<\/h6>\n<ul>\n<li>NodePort\u306e\u30b9\u30fc\u30d1\u30fc\u30bb\u30c3\u30c8<\/li>\n<li>\u30af\u30e9\u30a6\u30c9\u5916\u90e8\u306b\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fc\u3092\u4f5c\u6210<\/li>\n<li>Service\u306b\u56fa\u6709\u306eIP\u3092\u5272\u308a\u5f53\u3066\u308b<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h6>ExternalName<\/h6>\n<ul>\n<li>\u4efb\u610f\u306e\u540d\u524d\u3092\u4f7f\u7528\u3057\u3066Service\u3092\u516c\u958b\u3067\u304d\u308b<\/li>\n<li>proxy\u306f\u4f7f\u7528\u3057\u306a\u3044<\/li>\n<li>kube-dns\u304c\u5fc5\u8981<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<h3>Service\u3068Label<\/h3>\n<p>Service\u306f\u30e9\u30d9\u30eb\u3068\u30bb\u30ec\u30af\u30bf\u3092\u4f7f\u7528\u3057\u3066\u4e00\u9023\u306ePod\u3092\u7167\u5408\u3059\u308b\u3002<\/p>\n<p>\u30e9\u30d9\u30eb\u306fkey\/value\u306e\u30da\u30a2\u3067\u3001\u3044\u308d\u3093\u306a\u4f7f\u308f\u308c\u65b9\u3092\u3059\u308b\u3002<\/p>\n<p><a href=\"https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f.png\"><img decoding=\"async\" class=\"alignnone wp-image-4016 size-full\" src=\"https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f.png\" alt=\"\" width=\"1236\" height=\"1118\" srcset=\"https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f.png 1236w, https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f-300x271.png 300w, https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f-768x695.png 768w, https:\/\/greentown.tokyo\/wp-content\/uploads\/2019\/04\/4417b527701b49e38fdfec6c5ea14d6f-1024x926.png 1024w\" sizes=\"(max-width: 1236px) 100vw, 1236px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h3>Label\u3092\u4f7f\u7528\u3059\u308b<\/h3>\n<p>Pod\u3092\u8868\u793a\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get pods\r\nNAME                                   READY   STATUS    RESTARTS   AGE\r\nkubernetes-bootcamp-6bf84cb898-k7htp   1\/1     Running   0          3s<\/pre>\n<p>&nbsp;<\/p>\n<p>Service\u3092\u8868\u793a\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get services\r\nNAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE\r\nkubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443\/TCP   73s<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5916\u90e8\u306b\u516c\u958b\u7528\u306bNodePort\u3092\u6307\u5b9a\u3057\u3001\u65b0\u3057\u3044Service\u3092\u4f5c\u6210\u3059\u308b\u3002\uff08minikube\u306f\u30ed\u30fc\u30c9\u30d0\u30e9\u30f3\u30b5\u30fc\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u306a\u3044\uff09<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl expose deployment\/kubernetes-bootcamp --type=\"NodePort\" --port 8080\r\nservice\/kubernetes-bootcamp exposed<\/pre>\n<p>&nbsp;<\/p>\n<p>Service\u3092\u3082\u3046\u4e00\u5ea6\u8868\u793a\u3059\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get services\r\nNAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE\r\nkubernetes            ClusterIP   10.96.0.1      &lt;none&gt;        443\/TCP          4m35s\r\nkubernetes-bootcamp   NodePort    10.96.28.134   &lt;none&gt;        8080:32014\/TCP   2m19s<\/pre>\n<p>\u5897\u3048\u3066\u308b\u3002<\/p>\n<p>kubernates\u3063\u3066\u306e\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u30b5\u30fc\u30d3\u30b9\u3067\u3001Kubernetes-bootcamp\u304c\u4eca\u8ffd\u52a0\uff06\u516c\u958b\u3057\u305f\u3084\u3064\u3002<\/p>\n<p>&nbsp;<\/p>\n<h6>kubectl describe<\/h6>\n<p>\u30dd\u30fc\u30c8\u3092\u78ba\u8a8d<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl describe services\/kubernetes-bootcamp\r\nName:                     kubernetes-bootcamp\r\nNamespace:                default\r\nLabels:                   run=kubernetes-bootcamp\r\nAnnotations:              &lt;none&gt;\r\nSelector:                 run=kubernetes-bootcamp\r\nType:                     NodePort\r\nIP:                       10.96.28.134\r\nPort:                     &lt;unset&gt;  8080\/TCP\r\nTargetPort:               8080\/TCP\r\nNodePort:                 &lt;unset&gt;  32014\/TCP\r\nEndpoints:                172.18.0.3:8080\r\nSession Affinity:         None\r\nExternal Traffic Policy:  Cluster\r\nEvents:                   &lt;none&gt;<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5909\u6570 NODE_PORT \u3092\u4f5c\u6210\u3059\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ export NODE_PORT=$(kubectl get services\/kubernetes-bootcamp -o go-template='{{(index.spec.ports 0).nodePort}}')\r\n$ echo NODE_PORT=$NODE_PORT\r\nNODE_PORT=32014<\/pre>\n<p>&nbsp;<\/p>\n<p>\u30c6\u30b9\u30c8\u3002<\/p>\n<pre class=\"lang:default decode:true \">$ curl $(minikube ip):$NODE_PORT\r\nHello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-vttfq | v=1<\/pre>\n<p>\u7d76\u8cdb\u516c\u958b\u4e2d\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>Label\u306f\u52dd\u624b\u306b\u8cbc\u3089\u308c\u308b\u3063\u307d\u3044\u3067\u3059\u3002 describe\u30b3\u30de\u30f3\u30c9\u3067\u78ba\u8a8d\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl describe deployment\r\nName:                   kubernetes-bootcamp\r\nNamespace:              default\r\nCreationTimestamp:      Sun, 07 Apr 2019 10:07:45 +0000\r\nLabels:                 run=kubernetes-bootcamp\r\nAnnotations:            deployment.kubernetes.io\/revision: 1\r\nSelector:               run=kubernetes-bootcamp\r\nReplicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable\r\nStrategyType:           RollingUpdate\r\nMinReadySeconds:        0\r\n\uff1a\r\n\uff1a\r\n\uff08\u3044\u308d\u3044\u308d\u3001\u305f\u304f\u3055\u3093\u8868\u793a\u3055\u308c\u308b\uff09<\/pre>\n<p>&nbsp;<\/p>\n<p>Label\uff08kubernatis-bootcamp\uff09\u3092\u4f7f\u3063\u3066Pod\u306b\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u307f\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get pods -l run=kubernetes-bootcamp\r\nNAME                                   READY   STATUS    RESTARTS   AGE\r\nkubernetes-bootcamp-6bf84cb898-vttfq   1\/1     Running   0          20m<\/pre>\n<p>\u3053\u308c\u3067\u3082\u826f\u3044\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get services -l run=kubernetes-bootcamp\r\nNAME                  TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE\r\nkubernetes-bootcamp   NodePort   10.96.28.134   &lt;none&gt;        8080:32014\/TCP   19m<\/pre>\n<p>&nbsp;<\/p>\n<p>Pod\u540d\u3092\u5909\u6570\u306b\u5165\u308c\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{\"\\n\"}}{{end}}')\r\n$ echo Name of the Pod: $POD_NAME\r\nName of the Pod: kubernetes-bootcamp-6bf84cb898-vttfq<\/pre>\n<p>&nbsp;<\/p>\n<p>\u65b0\u3057\u3044Label\u3092\u3064\u3051\u3066\u3001\u78ba\u8a8d\u3002<\/p>\n<pre class=\"lang:default decode:true \">$ kubectl label pod $POD_NAME app=v1\r\npod\/kubernetes-bootcamp-6bf84cb898-vttfq labeled\r\n$ kubectl label pod $POD_NAME app=v1\r\npod\/kubernetes-bootcamp-6bf84cb898-vttfq labeled\r\n$ kubectl describe pods $POD_NAME\r\nName:               kubernetes-bootcamp-6bf84cb898-vttfq\r\nNamespace:          default\r\nPriority:           0\r\nPriorityClassName:  &lt;none&gt;\r\nNode:               minikube\/172.17.0.18\r\nStart Time:         Sun, 07 Apr 2019 10:07:52 +0000\r\nLabels:             app=v1\r\n                    pod-template-hash=6bf84cb898\r\n                    run=kubernetes-bootcamp\r\nAnnotations:        &lt;none&gt;<\/pre>\n<p>app=v1 \u306b\u306a\u3063\u3066\u308b\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u65b0\u3057\u3044Label\u3067Pod\u3092\u8868\u793a\u3057\u3066\u307f\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl get pods -l app=v1\r\nNAME                                   READY   STATUS    RESTARTS   AGE\r\nkubernetes-bootcamp-6bf84cb898-vttfq   1\/1     Running   0          26m\r\n$<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Service\u3092\u524a\u9664\u3059\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl delete service -l run=kubernetes-bootcamp\r\nservice \"kubernetes-bootcamp\" deleted\r\n$ kubectl get services\r\nNAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE\r\nkubernetes   ClusterIP   10.96.0.1    &lt;none&gt;        443\/TCP   29m<\/pre>\n<p>&nbsp;<\/p>\n<p>\u30af\u30e9\u30b9\u30bf\u5916\u90e8\u304b\u3089\u898b\u3048\u306a\u3044\u3053\u3068\u3092\u78ba\u8a8d\u3059\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ curl $(minikube ip):$NODE_PORT\r\ncurl: (7) Failed to connect to 172.17.0.18 port 32014: Connection refused<\/pre>\n<p>&nbsp;<\/p>\n<p>\u5185\u90e8\u304b\u3089\u898b\u3048\u308b\u304b\u78ba\u8a8d\u3059\u308b\u3002<\/p>\n<pre class=\"theme:dark-terminal lang:default decode:true \">$ kubectl exec -ti $POD_NAME curl localhost:8080\r\nHello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-6bf84cb898-vttfq | v=1<\/pre>\n<p>\u307f\u3048\u307e\u3059\u306d\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>\u4eca\u65e5\u306f\u3053\u3053\u307e\u3067\u301c<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetis\u304a\u52c9\u5f37\u306e\u7d9a\u304d\u3002 Kubernetes Service Pod\u306e\u8ad6\u7406\u30bb\u30c3\u30c8\u3068Pod\u305f\u3061\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306e\u30dd\u30ea\u30b7\u30fc\u3092\u5b9a\u7fa9\u3059\u308b\u62bd\u8c61\u6982\u5ff5\u3002 &nbsp; \u6982\u8981 Pod\u306b\u306f\u30e9\u30a4\u30d5\u30b5\u30a4\u30af\u30eb\u304c &#8230; <\/p>\n","protected":false},"author":1,"featured_media":3981,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[98],"tags":[],"class_list":["post-3984","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-container"],"_links":{"self":[{"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/3984"}],"collection":[{"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=3984"}],"version-history":[{"count":10,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/3984\/revisions"}],"predecessor-version":[{"id":4022,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/posts\/3984\/revisions\/4022"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=\/wp\/v2\/media\/3981"}],"wp:attachment":[{"href":"https:\/\/greentown.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=3984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=3984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/greentown.tokyo\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=3984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}