續上文,在部署docker之前需要預習下docker命令 docker基礎命令
docke pull nginx#下載nginx鏡像
docke push 192.168.161.117:5000/os/centos #上傳本地製作的鏡像到本地鏡像庫
docker images #查看下載到本地的鏡象
docker tag 980e0e4c79ec 192.168.161.117:5000/os/centos #將Image id鏡像為980e0e4c79ec的鏡像標記為192.168.161.117:5000/os/centos
docker run -it nginx /bin/bash #進入互動模式下的nginx容器,相當於一個小的linux系統,裡面只安裝了nginx
docker開啟sshd 通過docker指定容器id或者kubectl指定pod串連到相應的docker容器,這樣操作不是很方便。開啟docker容器的sshd服務,通過宿主機的連接埠映射docker容器的sshd服務的內部連接埠,可以實現宿主機的連接埠下訪問內部docker。
docker run -d -p 10022:22 centos_sshd /usr/sbin/sshd -D #使用 安裝了sshd 的tomcentos_sshd鏡像,啟動時啟動sshd服務。10022:22前者是宿主機的連接埠,後者是docker容器的連接埠
ssh 宿主機 -p 10022 #遠程登入docker容器 搭建本地鏡像庫
docker pull registry #下載registry鏡像,使用docker直接部署本地鏡像庫
docker run -d -p 5000:5000 registry ##以registry 鏡像啟動docker容器,搭建本地鏡像庫,監聽5000連接埠
curl -X GET http://127.0.0.1:5000/v2/_catalog ##查看本地倉庫已push鏡像
部署k8s pod與service 以nginx鏡像為樣本,通過docke pull nginx下載鏡像到本地
k8s部署支援yaml,json,命令,dashboard管理平台4種方式部署pod\service 1 .kubectl run my-nginx --image=nginx --replicas=2 --port=80
2. ./kubectl create -f nginx_svc.json 或者kubectl expose deployment my-nginx --type=NodePort --name=my-nginx-serv
3.命令完成後,通過kubectl get pod 查看pod
NAME READY STATUS RESTARTS AGE
my-nginx-2494149703-7040i 1/1 Running 0 4d
my-nginx-2494149703-8cwj9 1/1 Running 2 4d
4.命令完成後,通過 kubectl get service 查看service
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
my-nginx-serv 10.10.10.112 <nodes> 8080/TCP 5d
5.如果pod運行失敗,上圖中status不為Running狀態。通過kubectl describle pod my-nginx-2494149703-7040i 查看失敗日誌 Name: my-nginx-2494149703-7040i
Namespace: default
Node: 192.168.161.117/192.168.161.117
Start Time: Thu, 05 Jan 2017 14:52:26 +0800
Labels: pod-template-hash=2494149703
run=my-nginx
Status: Running
IP: 10.1.83.9
Controllers: ReplicaSet/my-nginx-2494149703
Containers:
my-nginx:
Container ID: docker://aa0540cabb114f6291399b1675f9e84fdb8baffcc8c64f1689f65ec63b5f8a49
Image: nginx
Image ID: docker://sha256:01f818af747d88b4ebca7cdabd0c581e406e0e790be72678d257735fad84a15f
Port: 80/TCP
State: Running
Started: Thu, 05 Jan 2017 14:52:29 +0800
Ready: True
Restart Count: 0
Environment Variables: <none>
Conditions:
Type Status
Initialized True
Ready True
PodScheduled True
No volumes.
QoS Tier: BestEffort
No events.
6.通過./kubectl exec my-nginx-2494149703-7040i -i -t -- bash -il進行docker容器調試
root@my-nginx-2494149703-7040i:/# pwd
/
root@my-nginx-2494149703-7040i:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@my-nginx-2494149703-7040i:/# ps -ef|grep nginx
root 1 0 0 Jan05 ? 00:00:00 nginx: master process nginx -g daemon off;
nginx 7 1 0 Jan05 ? 00:00:00 nginx: worker process
root 44 34 0 08:27 ? 00:00:00 grep nginx
root@my-nginx-2494149703-7040i:/# find / -name error.log
/var/log/nginx/error.log
6.通過dashboard查看nodes、serive、pod
7.訪問nginx 通過內網訪問 ,30451連接埠是service配置負載平衡類型為nodePort後,可以通過宿主機Ip+連接埠訪問service.service 實現負載平衡訪問Pod .由Pod由多個docker組成,此處ngnx一個pod由一個docker組成。 訪問 http://192.168.161.117:30451/ 可以返回welcome to nginx畫面
注意services圖 中clusterIp 與internal endpoints內容。cluster ip是10.10.10.112,這是叢集的內網Ip,在安裝了kubelproxy的主機上可以訪問。internal endpoints中的30451連接埠,宿主機區域網路內任意主機都可以訪問。 通過內部叢集訪問,ip與連接埠取自第4步中CLUSTER-IP與PORT或者對應本圖中的cluster ip與internal endpoints內容的連接埠8080 curl http:// 10.10.10.112:8080/
pod內部nginx容器也會分配內部Ip10.1.83.9 與10.1.83.7子網,如果node有多台。每台宿主機都是一個獨立子網段,centos7下安裝與部署kubernets1.3(一)有描述。
訪問以下地址,均能返回welcome to nginx的成功介面 curl http:// 10.10.83.1:8080/ curl http:// 10.10.83.7:8080/
更重要的是每個宿主機的獨立子網,是相互能互連的。通過docker run -it centos /bin/bash到兩台不同宿主機上,分別進行centos作業系統命令介面,相互ping對方Ip是可以相互ping通的。相互訪問nginx pod的訪問地址也是能通的。 後續,再續寫測試子網互連的例子+製做tomcat 應用鏡像的樣本。