Skip to content

Instantly share code, notes, and snippets.

@nwiizo
Last active July 14, 2019 14:57
Show Gist options
  • Save nwiizo/faba54a984743a1d6c9706886af392f1 to your computer and use it in GitHub Desktop.
Save nwiizo/faba54a984743a1d6c9706886af392f1 to your computer and use it in GitHub Desktop.
7月12日 麻生情報ビジネス専門学校 特別講義

ハンズオン

講義はどうでしたか?ここが良かった。悪かったなどがあるなら積極的にnwiizoにメンション飛ばしてください。

1. ConoHaの登録と VMの準備

  • アカウントの登録
  • 推奨OS Ubuntu 18.04 LTS (検証これでやった)
  • 推奨VMサイズ 4GB以上 ()

2. OSの基本設定とKubernetes

2.1 Ansibleでインストール

パッケージのダウンロード

# apt-get update
# apt-get install software-properties-common
# apt-add-repository --yes --update ppa:ansible/ansible
# apt-get install ansible

今回はk8sやDockerに触れるファーストなので全部サクッとAnsibleで構築してしまいます

# git clone https://github.com/nwiizo/kubernetes-on-conoha

待てばなおりますがapt がどうしても終わらない人

# ps aux |grep apt
# kill -9 <PID>

2.1.1 Ansibleの実行

Ansibleの実行を行います.ここで詰まったら一緒に泣きながらデバッグしましょう
Document
vim /etc/ansible/ansible.cfg

[defaults]
host_key_checking = False

vim hosts.yml

[kubernetes:children]
Kubernetes

[Kubernetes]
<ex-ip>

コマンドの実行

# ansible-playbook -i ./hosts.yml ./site.yml -l "<ex-IP>" -k

2.2 Minikubeでインストール

2.3 Kubeadmでインストール

3.確認

インフラを自動で管理する方法はいくつかあって有名なものでいうとserverspecGossなどのツールがあります.

# docker -v
  • Kubernetesの確認 kubernetes を操作するにはkubectlを用いることが多いのでご確認お願いします。
# su - k8sops
# bashrcにでも入れとけばいい
# export KUBECONFIG=/home/k8sops/.kube/config
# cluster の確認
# kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:37:52Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.4", GitCommit:"c27b913fddd1a6c480c229191a087698aa92f0b1", GitTreeState:"clean", BuildDate:"2019-02-28T13:30:26Z", GoVersion:"go1.11.5", Compiler:"gc", Platform:"linux/amd64"}

クラスターの詳細情報

# kubectl cluster-info
Kubernetes master is running at https://*.*.*.*:6443
KubeDNS is running at https://*.*.*.*:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

nodeの確認

# kubectl get nodes
NAME             STATUS   ROLES    AGE   VERSION
*-*-*-*          Ready    master   16m   v1.13.4

Namespaceの確認

# kubectl get namespaces
NAME          STATUS   AGE
default       Active   22m
kube-public   Active   22m
kube-system   Active   22m

Podの確認

# kubectl get pods --all-namespaces
NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
kube-system   coredns-86c58d9df4-d45kz                 1/1     Running   0          26m
kube-system   coredns-86c58d9df4-xt7lk                 1/1     Running   0          26m
kube-system   etcd-150-95-147-209                      1/1     Running   0          25m
kube-system   kube-apiserver-150-95-147-209            1/1     Running   0          25m
kube-system   kube-controller-manager-150-95-147-209   1/1     Running   0          25m
kube-system   kube-proxy-5k79s                         1/1     Running   0          26m
kube-system   kube-scheduler-150-95-147-209            1/1     Running   0          25m
kube-system   tiller-deploy-5b7c66d59c-p5gdc           1/1     Running   0          26m
kube-system   weave-net-rcpkr                          2/2     Running   0          26m

4. Docker の実行

ないなら良いが# docker loginをやっとくと今後は楽.こちらの演習はrootユーザーで実行してください.

  • とりあえず,Hello world
# docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:2557e3c07ed1e38f26e389462d03ed943586f744621577a99efb77324b0fe535
Status: Downloaded newer image for hello-world:latest

Hello from Docker!

確認しました.

# docker images | grep hello
hello-world                          latest              fce289e99eb9        8 weeks ago         1.84kB
  • Nginxの公開
# docker pull docker.io/nginx
# docker run -d -p 8000:80 --name nginx-latest docker.io/nginx:latest
# wget 127.0.0.1:8000

ブラウザで確認後 Docker の削除

# docker ps | grep nginx
9fd4701f4953        nginx:latest                    "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   nginx-latest
# docker stop 9fd4701f4953
9fd4701f4953
# docker ps | grep nginx
# Github上のファイルをコピペしてください.DockerFileを書いて
# vim Dockerfile
# build して
# docker build . -t abcc_example01
# docker images | grep abcc
abcc_example01  latest              ecb3f44aea9f        2 minutes ago       109MB 
# 走らせませす.
# docker run -d -p 8080:80 --name abcc_example01 abcc_example01:latest

ブラウザで確認してください アクセスできませんでしかた?残念… Docker -p とかでoption について調べて修正してみましょう。 終わったらちゃんと削除してくださいね

# docker ps | grep abcc
# docker kill <CONTAINER ID>

課題

Docker-composeで書き直してみてください

# docker run -d -p 8080:80 --name abcc_example01 abcc_example01:latest
チャレンジ課題

同様にDockerFileからApacheをビルドしてみてください

5. Kubernetes の実行

ないなら良いが# docker loginをやっとくとrootで実行してみてください rootで実行したい場合には環境変数としてexport KUBECONFIG=/etc/kubernetes/admin.confを設定してください

コマンドによる簡易的なデプロイ

# # アプリケーションのデプロイ
# kubectl create deployment nginx-preview --image nginx:latest
deployment.apps/nginx-preview created
# # 確認
# kubectl get deployment nginx-preview
NAME            READY   UP-TO-DATE   AVAILABLE   AGE
nginx-preview   1/1     1            1           74s
# # ポートの公開
# kubectl expose --type LoadBalancer --port 80 deployment nginx-preview
# # 確認
# kubectl get service nginx-preview -o wide
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE     SELECTOR
service/nginx-preview   LoadBalancer   10.111.201.111   <pending>     80:30597/TCP   2m23s   app=nginx-preview
# # ブラウザ等で確認後削除
# kubectl delete service,deployment  nginx-preview
service "nginx-preview" deleted
deployment.extensions "nginx-preview" deleted
# リソースがないことを確認
# kubectl get pod -o wide
# kubectl get service,deployment nginx-preview -o wide
Error from server (NotFound): services "nginx-preview" not found
Error from server (NotFound): deployments.extensions "nginx-preview" not found

demo.yamlというマニュフェストを参考に実行していきましょう

下記を

          image: gtb_example01:latest

これに書き換えましょう

          image: abcc_example01:latest
# kubectl apply -f demo.yaml
# kubectl get pods --selector app=demo
# kubectl get service
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)          AGE
demo         LoadBalancer   10.108.16.22   <pending>     8080:30080/TCP   3m41s
kubernetes   ClusterIP      10.96.0.1      <none>        443/TCP          108m

削除します

# kubectl delete -f demo.yaml
deployment.extensions "demo" deleted
service "demo" deleted

課題

  • Podを3つ起動させてデプロイしてください
  • appラベルをdevにしてデプロイしてください

チャレンジ課題

同様にApacheで動作するPodを動作させてください

6.最終課題

main.goをコンテナ化及びKubernetesにて外部へ公開してください

さいごに

一旦、ここまで終了できた貴方を褒めたいと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment