续上文,在部署docker之前需要预习下docker命令
docker基础命令
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宿主机 -p10022 #远程登录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
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
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
my-Nginx-2494149703-7040i 1/1 Running 0 4d
my-Nginx-2494149703-8cwj9 1/1 Running 2 4d
4.命令完成后,通过kubectl get service查看service
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.
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
/
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的成功界面
curlhttp:// 10.10.83.1:8080/
curlhttp:// 10.10.83.7:8080/
更重要的是每个宿主机的独立子网,是相互能互通的。通过docker run -it centos /bin/bash到两台不同宿主机上,分别进行centos操作系统命令界面,相互ping对方Ip是可以相互ping通的。相互访问Nginx pod的访问地址也是能通的。
后续,再续写测试子网互通的例子+制做tomcat 应用镜像的示例。
原文链接:https://www.f2er.com/centos/379105.html