今までkubernetesを試すのがとても面倒そうだったので敬遠していたがkubeadmができて便利になったということなので試してみる。
参考 というかこれをそのまま実行: http://kubernetes.io/docs/getting-started-guides/kubeadm/
これを使ってkubeクラスタを作ってみる
>> code bash
# curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
# cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
# apt-get update
# apt-get install -y docker.io kubelet kubeadm kubectl kubernetes-cni
<<
セットアップ
結構かかる
>> code bash
# kubeadm init
<いろいろ出てくる>
kubeadm join --token XXXXXXX 10.0.2.15
<<
このIPはVMの内部ネットワークのやつか。
とりあえずmasterしかないけど動いた。
>> code bash
# kubectl get nodes
NAME STATUS AGE
ubuntu Ready 6m
# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system etcd-ubuntu 1/1 Running 0 6m
kube-system kube-apiserver-ubuntu 1/1 Running 0 6m
kube-system kube-controller-manager-ubuntu 1/1 Running 0 5m
kube-system kube-discovery-982812725-k7j3s 1/1 Running 0 5m
kube-system kube-dns-2247936740-bcc47 0/3 ContainerCreating 0 2m
kube-system kube-proxy-amd64-02mp5 0/1 ContainerCreating 0 2m
kube-system kube-scheduler-ubuntu 1/1 Running 0 6m
<<
まだCreatingのやつがあるな・・待ってみる kube-proxyは待っているとRunningになった。
kube-dnsは待っても進まないな。放置しよう
nodeは追加せず1台でお試しで使うため
>> code bash
# kubectl taint nodes --all dedicated-
<<
セキュリティ的にはまずいらしい
1台だけなのでネットワークはこのままでよいはず。
ここで動かしてみて、いい感じならnodeを追加していく感じになるのだと思う
お試しのアプリを入れてみるか
やっぱりおかしいのでネットワークも入れておく
>> code bash
# kubectl apply -f https://git.io/weave-kube
<<
お、kube-dns動くようになった
ちょっとマシンを再起動してみる。
kuberntesはどうなるんだろう?
消し方も公式に書いてあった
>> code bash
systemctl stop kubelet;
docker rm -f $(docker ps -q); mount | grep "/var/lib/kubelet/*" | awk '{print $3}' | xargs umount 1>/dev/null 2>/dev/null;
rm -rf /var/lib/kubelet /etc/kubernetes /var/lib/etcd /etc/cni;
ip link set cbr0 down; ip link del cbr0;
ip link set cni0 down; ip link del cni0;
systemctl start kubelet
<<
もう一度kubeadmを実行。イメージのpullが終わってるから早い。
taintはもう一度実行する必要があるみたい
pod.yaml
>>
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
<<
svc.yaml
>>
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: LoadBalancer
ports:
- port: 8000 # the port that this service should serve on
# the container on each pod to connect to, can be a name
# (e.g. 'www') or a number (e.g. 80)
targetPort: 80
protocol: TCP
# just like the selector in the deployment,
# but this time it identifies the set of pods to load balance
# traffic to.
selector:
app: nginx
<<
これを投入する
>> code bash
# kubectl apply -f svc.yaml
# kubectl apply -f pod.yaml
<<
>> code bash
# kubectl describe svc nginx-service
Name: nginx-service
Namespace: default
Labels: <none>
Selector: app=nginx
Type: LoadBalancer
IP: 100.77.86.229
Port: <unset> 8000/TCP
NodePort: <unset> 32191/TCP
Endpoints: 10.32.0.3:80
Session Affinity: None
<<
これでこのマシンの32191ポートにアクセスするとnginxにアクセスできた!
kube-uiもつけてみよう
http://kubernetes.io/docs/user-guide/ui/
>> code bash
# kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml
<<
>> code bash
# kubectl describe svc --namespace kube-system kubernetes-dashboard
Name: kubernetes-dashboard
Namespace: kube-system
Labels: app=kubernetes-dashboard
Selector: app=kubernetes-dashboard
Type: NodePort
IP: 100.69.211.127
Port: <unset> 80/TCP
NodePort: <unset> 31308/TCP
Endpoints: 10.32.0.4:9090
Session Affinity: None
<<
ということで
http://{このマシンのIP}:31308 でアクセスするとUIがみられる!5643382
wiki
1475857183