{"id":8399,"date":"2024-01-17T11:33:08","date_gmt":"2024-01-17T02:33:08","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=8399"},"modified":"2024-01-18T11:00:46","modified_gmt":"2024-01-18T02:00:46","slug":"kubernetes-k8s-%eb%a1%9c%ec%bb%ac-%ed%81%b4%eb%9f%ac%ec%8a%a4%ed%84%b0-%ea%b5%ac%ec%b6%95%ed%95%98%ea%b8%b0-with-kind","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=8399","title":{"rendered":"Kubernetes &#8211; k8s \ub85c\uceec \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\ud558\uae30 with kind"},"content":{"rendered":"<h1>Kubernetes &#8211; k8s \ub85c\uceec \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\ud558\uae30 with kind<\/h1>\n<h2>kind \ub780?<\/h2>\n<p>kind(Kubernetes IN Docker) \ub294 Kubernetes \uc790\uccb4\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ud234\uc785\ub2c8\ub2e4.<br \/>\n\ud558\uc9c0\ub9cc \ub2e4\uc218\uc758 \ub178\ub4dc\ub85c \uad6c\uc131\ub41c k8s \ub85c\uceec \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\ub3c4 \uac00\ub2a5\ud558\uae30\uc5d0 \uad6c\ucd95\ubc29\ubc95\uc744 \uc801\uc5b4\ubd05\ub2c8\ub2e4.<\/p>\n<h2>Windows 10 \uc778 \uacbd\uc6b0 (Optional)<\/h2>\n<p>OS \uac00 \ub9ac\ub205\uc2a4\uc778 \uacbd\uc6b0 \uc774\ubc88 \ub2e8\uacc4\ub294 \uc2a4\ud0b5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc6b0\uc120 Docker Desktop \uc744 \uc124\uce58 \ubc0f \uc2e4\ud589\uc2dc\ucf1c \uc90d\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=8347\">\uc5ec\uae30<\/a> \ub97c \ucc38\uc870\ud558\uc5ec WSL2 Ubuntu \ub97c \uc124\uce58\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798 \ub0b4\uc6a9\uc740 WSL2 Ubuntu \uc5d0 \uc811\uc18d\ud55c \uc0c1\ud0dc\uc784\uc744 \uac00\uc815\ud558\uace0 \uc9c4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<h2>Docker \uc124\uce58 \ud655\uc778<\/h2>\n<p>\ub3c4\ucee4\uac00 \uc124\uce58\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc73c\uba74 \uc124\uce58\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\">sudo docker version<\/code><\/pre>\n<h2>kind \uc124\uce58<\/h2>\n<pre><code class=\"language-bash\">curl -Lo .\/kind https:\/\/kind.sigs.k8s.io\/dl\/v0.20.0\/kind-linux-amd64\nchmod +x .\/kind\nsudo mv .\/kind \/usr\/local\/bin\/kind<\/code><\/pre>\n<h2>\ud074\ub7ec\uc2a4\ud130 \uc0dd\uc131<\/h2>\n<p>\ubcc4\ub2e4\ub978 \uc124\uc815\uc5c6\uc774 \uc0dd\uc131\ud558\uba74 \ud558\ub098\uc758 \ub178\ub4dc\ub9cc \uc0dd\uc131\ub429\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\">sudo kind create cluster --name kubernetes-single\nsudo kubectl get node\nsudo kind delete cluster --name kubernetes-single<\/code><\/pre>\n<p>3\uac1c\uc758 \ub178\ub4dc\ub85c \uad6c\uc131\ub41c \ud074\ub7ec\uc2a4\ud130\ub97c \ub2e4\uc2dc \uc0dd\uc131\ud574 \uc90d\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\">vi kind-master1-worker2.yaml\n--------------------------\nkind: Cluster\napiVersion: kind.x-k8s.io\/v1alpha4\nnodes:\n  - role: control-plane\n  - role: worker\n  - role: worker<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo kind create cluster --name kubernetes --config .\/kind-master1-worker2.yaml\n\nsudo kubectl get node\n--------------------------\nNAME                       STATUS   ROLES           AGE   VERSION\nkubernetes-control-plane   Ready    control-plane   76s   v1.27.3\nkubernetes-worker          Ready    &lt;none&gt;          51s   v1.27.3\nkubernetes-worker2         Ready    &lt;none&gt;          51s   v1.27.3<\/code><\/pre>\n<h2>Ingress<\/h2>\n<p><a href=\"https:\/\/kind.sigs.k8s.io\/docs\/user\/ingress\/\">\ucc38\uc870<\/a><\/p>\n<p>\ub85c\uceec\uc5d0 \ub2e4\uc218\uc758 \ub178\ub4dc\ub97c \uc0dd\uc131\ud55c \uc0c1\ud669\uc774\ubbc0\ub85c, \uc77c\ubc18\uc801\uc778 \uc124\uc815\uc73c\ub85c\ub294 Pod \uc5d0 \ube0c\ub77c\uc6b0\uc800\ub97c \uc774\uc6a9\ud55c \uc811\uadfc\uc774 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798\uc5d0\uc11c\ub294 Ingress NGINX \ub97c \uc774\uc6a9\ud55c \uc811\uadfc\ubc95\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<h3>\ud074\ub7ec\uc2a4\ud130 \uc0dd\uc131<\/h3>\n<pre><code class=\"language-bash\">sudo kind delete cluster --name kubernetes<\/code><\/pre>\n<pre><code class=\"language-bash\">cat &lt;&lt;EOF | sudo kind create cluster --name kubernetes --config=-\nkind: Cluster\napiVersion: kind.x-k8s.io\/v1alpha4\nnodes:\n- role: control-plane\n  kubeadmConfigPatches:\n  - |\n    kind: InitConfiguration\n    nodeRegistration:\n      kubeletExtraArgs:\n        node-labels: &quot;ingress-ready=true&quot;\n  extraPortMappings:\n  - containerPort: 80\n    hostPort: 80\n    protocol: TCP\n  - containerPort: 443\n    hostPort: 443\n    protocol: TCP\n- role: worker\n- role: worker\nEOF<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo kubectl get node\n--------------------------\nNAME                       STATUS   ROLES           AGE   VERSION\nkubernetes-control-plane   Ready    control-plane   33s   v1.27.3\nkubernetes-worker          Ready    &lt;none&gt;          13s   v1.27.3\nkubernetes-worker2         Ready    &lt;none&gt;          9s    v1.27.3<\/code><\/pre>\n<h3>ingress-nginx \uc0dd\uc131<\/h3>\n<pre><code class=\"language-bash\">sudo kubectl apply -f https:\/\/raw.githubusercontent.com\/kubernetes\/ingress-nginx\/main\/deploy\/static\/provider\/kind\/deploy.yaml<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo kubectl get pods -n ingress-nginx<\/code><\/pre>\n<h3>\ud14c\uc2a4\ud2b8<\/h3>\n<pre><code class=\"language-bash\">vi nginx-deployment.yaml\n--------------------------\napiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: nginx-server\n  labels:\n    app: server\nspec:\n  replicas: 2\n  selector:\n    matchLabels:\n      app: server\n  template:\n    metadata:\n      name: nginx-server\n      labels:\n        app: server\n    spec:\n      containers:\n        - name: server\n          image: nginx:1.23.3\n          ports:\n            - containerPort: 80<\/code><\/pre>\n<pre><code class=\"language-bash\">sudo kubectl create -f nginx-deployment.yaml\n\nsudo kubectl get pods -o wide\n--------------------------\nNAME                            READY   STATUS    RESTARTS   AGE     IP           NODE                 NOMINATED NODE   READINESS GATES\nnginx-server-78b97df75c-5lqpx   1\/1     Running   0          3m29s   10.244.1.2   kubernetes-worker2   &lt;none&gt;           &lt;none&gt;\nnginx-server-78b97df75c-8fcwm   1\/1     Running   0          3m29s   10.244.2.2   kubernetes-worker    &lt;none&gt;           &lt;none&gt;<\/code><\/pre>\n<pre><code class=\"language-bash\">vi nginx-ingress.yaml\n--------------------------\napiVersion: v1\nkind: Service\nmetadata:\n  name: nginx-service\nspec:\n  type: ClusterIP\n  selector:\n    app: server\n  ports:\n  - name: http\n    port: 80\n    protocol: TCP\n    targetPort: 80\n---\napiVersion: networking.k8s.io\/v1\nkind: Ingress\nmetadata:\n  name: nginx-ingress\nspec:\n  ingressClassName: &quot;nginx&quot;\n  rules:\n  - host: &quot;localhost&quot;\n    http:\n      paths:\n      - pathType: Prefix\n        path: &quot;\/&quot;\n        backend:\n          service:\n            name: nginx-service\n            port:\n              number: 80<\/code><\/pre>\n<pre><code class=\"language-bash\"># sudo kubectl delete -f nginx-ingress.yaml\nsudo kubectl apply -f nginx-ingress.yaml<\/code><\/pre>\n<p><a href=\"http:\/\/localhost\/\">http:\/\/localhost\/<\/a> \ub85c \ube0c\ub77c\uc6b0\uc800\ub85c \uc811\uadfc\ud558\uba74 nginx \uac00 \uc2e4\ud589\uc911\uc778\uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes &#8211; k8s \ub85c\uceec \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\ud558\uae30 with kind kind \ub780? kind(Kubernetes IN Docker) \ub294 Kubernetes \uc790\uccb4\ub97c \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud55c \ud234\uc785\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ub2e4\uc218\uc758 \ub178\ub4dc\ub85c \uad6c\uc131\ub41c k8s \ub85c\uceec \ud074\ub7ec\uc2a4\ud130 \uad6c\ucd95\ub3c4 \uac00\ub2a5\ud558\uae30\uc5d0 \uad6c\ucd95\ubc29\ubc95\uc744 \uc801\uc5b4\ubd05\ub2c8\ub2e4. Windows 10 \uc778 \uacbd\uc6b0 (Optional) OS \uac00 \ub9ac\ub205\uc2a4\uc778 \uacbd\uc6b0 \uc774\ubc88 \ub2e8\uacc4\ub294 \uc2a4\ud0b5\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6b0\uc120 Docker Desktop \uc744 \uc124\uce58 \ubc0f \uc2e4\ud589\uc2dc\ucf1c \uc90d\ub2c8\ub2e4. \uc5ec\uae30 \ub97c \ucc38\uc870\ud558\uc5ec\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=8399\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-8399","post","type-post","status-publish","format-standard","hentry","category-kubernetes"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8399","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8399"}],"version-history":[{"count":18,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8399\/revisions"}],"predecessor-version":[{"id":8418,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/8399\/revisions\/8418"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8399"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8399"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8399"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}