续上文,在部署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 应用镜像的示例。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐