Red Hat Enterprise Linux 7部署Google容器管理工具Kubernetes
来源:互联网 发布:csgo国服网络连接失败 编辑:程序博客网 时间:2024/05/18 02:42
准备
在RHEL 7上部署Kubernetes之前, 需要准备如下资源:
- 安装Git;
- Docker的YUM源;
- 编译Kubernetes;
- 编译Etcd;
- 3台VM Hosts, 10.224.106.127(docker01), 10.224.106.128/130(docker02,docker03)
安装步骤
安装Git及编译Kubernetes和Etcd
docker01安装kubernetes apiserver, controller-manager, kubecfg和etcd, docker02/03安装docker和kubernetes kubelet和proxy.
安装Git
yum install git
编译Kubernetes和Etcd
cd /tmpgit clone https://github.com/GoogleCloudPlatform/kubernetes.gitcd kubernetes/hack./build-go.sh
cd /tmpgit clone https://github.com/coreos/etcd.gitcd etcd./build将编译后Kubernetes的apiserver, controller-manager和kubecfg移到/opt/kubernetes/bin目录下.
mkdir -p /opt/kubernetes/bincd /tmp/kubernetes/output/go/bincp apiserver /opt/kubernetes/bincp controller-manager /opt/kubernetes/bincp kubecfg /opt/kubernetes/bincd /tmp/etcd/bincp etcd /opt/kubernetes/bin配置apiserver, controller-manager, etcd的unit file, 首先做如下操作:
cd /etc/systemd/system/touch kubernetes-apiserver.servicetouch kubernetes-controller-manager.servicetouch etcd.service以下是kubernetes-apiserver.service, kubernetes-controller-manager.service, etcd.service的unit file配置:
#kubernetes-apiserver.service[Unit]Description=Kubernetes API Server[Service]ExecStart=/opt/kubernetes/bin/apiserver \ --address=10.224.106.127 \ --port=8080 \ --etcd_servers=http://10.224.106.127:4001 \ --machines=10.224.106.128,10.224.106.130 \ --logtostderr=true[Install]WantedBy=multi-user.target#kubernetes-controller-manager.service[Unit]Description=Kubernetes Controller Manager[Service]ExecStart=/opt/kubernetes/bin/controller-manager \ --etcd_servers=http://10.224.106.127:4001 \ --master=10.224.106.127:8080 \ --logtostderr[Install]WantedBy=multi-user.target#etcd.service[Unit]Description=Etcd ServerAfter=network.target[Service]Type=simple# etc logs to the journal directly, suppress double loggingStandardOutput=nullWorkingDirectory=/var/lib/etcdExecStart=/opt/kubernetes/bin/etcd -addr 10.224.106.127:4001 -peers 10.224.106.127:7001[Install]WantedBy=multi-user.target启动apiserver, controller-manager, etcd服务,
systemctl daemon-reloadsystemctl enable kubernetes-apiserversystemctl enable kubernetes-controller-managersystemctl enable etcdsystemctl start kubernetes-apiserversystemctl start kubernetes-controller-managersystemctl start etcd检查apiserver, controller-manager, etcd服务是否启动以及8080, 4001,7001 port是否打开,
[root@docker01 system]# ps -ef | grep -i kubernetesroot 12317 1 0 Aug15 ? 00:05:28 /opt/kubernetes/bin/apiserver --address=10.224.106.127 --port=8080 --etcd_servers=http://10.224.106.127:4001 --machines=10.224.106.128,10.224.106.130 --logtostderr=trueroot 12325 1 0 Aug15 ? 00:02:00 /opt/kubernetes/bin/controller-manager --etcd_servers=http://10.224.106.127:4001 --master=10.224.106.127:8080 --logtostderrroot 12333 1 0 Aug15 ? 00:02:39 /opt/kubernetes/bin/etcd -addr 10.224.106.127:4001 -peers 10.224.106.127:7001
telnet 8080, 4001, 7001port,
telnet 10.224.106.127 8080telnet 10.224.106.127 4001telnet 10.224.106.127 7001
iptables -I INPUT -p tcp --dport 4001 -j ACCEPTiptables -I INPUT -p tcp --dport 7001 -j ACCEPTiptables -I INPUT -p tcp --dport 8080 -j ACCEPT
配置Docker的YUM源和安装Docker
配置YUM源:
cd /tmpwget http://dl.fedoraproject.org/pub/epel/beta/7/x86_64/epel-release-7-0.2.noarch.rpmls *.rpmyum install epel-release-7-0.2.noarch.rpm安装Docker
yum install docker-iosystemctl enable dockersystemctl start docker执行docker version验证Docker是否安装成功, 如果安装成功, 输出如下信息:
[root@docker02 system]# docker versionClient version: 1.0.0Client API version: 1.12Go version (client): go1.2.2Git commit (client): 63fe64c/1.0.0Server version: 1.0.0Server API version: 1.12Go version (server): go1.2.2Git commit (server): 63fe64c/1.0.0
安装kubelet, proxy服务
同docker01一样, 在docker02和docker03上创建/opt/kubernetes/bin,mkdir -p /opt/kubernetes/bin将在docker01上编译的kubelet和proxy从/tmp/kubernetes/output/go/bin复制到/opt/kubernetes/bin目录下, 然后给kubelet和proxy配置unit file信息.
cd /etc/systemd/system/touch kubernetes-kubelet.servicetouch kubernetes-proxy.service以下是docker02上kubelet和proxy的具体unit file配置信息:
<pre name="code" class="plain">#kubernetes-kubelet.service[Unit]Description=Kubernetes Kubelet[Service]ExecStart=/opt/kubernetes/bin/kubelet \ --logtostderr=true \ --etcd_servers=http://10.224.106.127:4001 \ --address=10.224.106.128 \ --port=10250 \ --hostname_override=10.224.106.128[Install]WantedBy=multi-user.target#kubernetes-proxy.service[Unit]Description=Kubernetes Proxy[Service]ExecStart=/opt/kubernetes/bin/proxy \ --logtostderr=true \ --etcd_servers=http://10.224.106.127:4001[Install]WantedBy=multi-user.targetdocker03上kubelet和proxy的具体unit file配置信息:
#kubernetes-kubelet.service[Unit]Description=Kubernetes Kubelet[Service]ExecStart=/opt/kubernetes/bin/kubelet \ --logtostderr=true \ --etcd_servers=http://10.224.106.127:4001 \ --address=10.224.106.130 \ --port=10250 \ --hostname_override=10.224.106.130[Install]WantedBy=multi-user.target#kubernetes-proxy.service[Unit]Description=Kubernetes Proxy[Service]ExecStart=/opt/kubernetes/bin/proxy \ --logtostderr=true \ --etcd_servers=http://10.224.106.127:4001[Install]WantedBy=multi-user.target
启动kubelet和proxy服务:
systemctl daemon-reloadsystemctl enable kubernetes-kubeletsystemctl enable kubernetes-proxysystemctl start kubernetes-kubeletsystemctl start kubernetes-proxy
[root@docker02 system]# ps -ef | grep kubernetesroot 3676 1 0 Aug15 ? 00:01:06 /opt/kubernetes/bin/kubelet --logtostderr=true --etcd_servers=http://10.224.106.127:4001 --address=10.224.106.128 --port=10250 --hostname_override=10.224.106.128root 5116 1 0 00:32 ? 00:00:00 /opt/kubernetes/bin/proxy --logtostderr=true --etcd_servers=http://10.224.106.127:4001同dock01一样, telent docker02/03的10250 port是否打开, 如果没有, 可能需要检查iptables,
iptables -I INPUT -p tcp --dport 10250 -j ACCEPT
至此, kubernetes, docker在docker01, docker02, docker03已安装成功, 接下来我们使用kubernetes来创建Pod, Service, replicationController.
Examples
创建Redis Master Pod
在docker01上, 我们cd到/tmp/kubernetes/example/gestbook(以下所有关于创建Pod, Service, replicationController都是在这个目录下执行的), 然后执行如下命令创建Pod:
[root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 -c redis-master.json create podsName Image(s) Host Labels---------- ---------- ---------- ----------redis-master-2 dockerfile/redis / name=redis-master[root@docker01 guestbook]# [root@docker01 guestbook]# [root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 list podsName Image(s) Host Labels---------- ---------- ---------- ----------redis-master-2 dockerfile/redis 10.224.106.128/ name=redis-master根据上面的输出可知名为redis-master-2的Pod被创建在10.224.106.128(docker02), 在docke02上执行docker ps命令会有如下输出, 其中一个是redis container, 另一个是network container, network container给redis container提供网络, redis container的服务端口都通过network container暴露给外界, 因此每创建一个Pod, 就会相应的创建一个network container.
[root@docker02 system]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES28fba4be5e72 dockerfile/redis:latest redis-server /etc/re 4 minutes ago Up 4 minutes k8s--master--redis_-_master_-_2.etcd--be3edd4b f8355960c774 kubernetes/pause:latest /pause 4 minutes ago Up 4 minutes 0.0.0.0:6379->6379/tcp k8s--net--redis_-_master_-_2.etcd--bdcb4fa0
创建Redis Master Services
执行如下命令创建Services:
[root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 -c redis-master-service.json create servicesName Labels Selector Port---------- ---------- ---------- ----------redismaster name=redis-master 10000[root@docker01 guestbook]# [root@docker01 guestbook]# [root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 list servicesName Labels Selector Port---------- ---------- ---------- ----------redismaster name=redis-master 10000执行这个命令之后, 你能在docker02, docker03看到有一个10000 port被监听, 标志着Redis Master services启动成功.
[root@docker02 system]# netstat -anpl | grep 10000tcp6 0 0 :::10000 :::* LISTEN 5385/proxy[root@docker03 ~]# netstat -anpl | grep 10000tcp6 0 0 :::10000 :::* LISTEN 5986/proxy
创建Replicated Slave Pods
执行如下命令创建Replicated Slave Pods:
[root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 -c redis-slave-controller.json create replicationControllersI0817 01:34:12.358656 13986 request.go:249] Waiting for completion of /operations/192Name Image(s) Selector Replicas---------- ---------- ---------- ----------redisSlaveController brendanburns/redis-slave name=redisslave 2我们发现Replicas是2, 这表明根据redis-slave-controller.json的pod template会创建2个pod, 执行如下命令可知其中一个pod被创建在10.224.106.128, 而另一个pod被创建在10.224.106.130上, 这是因为Kubernetes采用Round Robin Schedule算法来选择host, 所以这2个pod分布在不同的host上, 而且在docker02和docker03上分别建立了一个container, 具体看输出信息.
[root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 list pods Name Image(s) Host Labels---------- ---------- ---------- ----------redis-master-2 dockerfile/redis 10.224.106.128/ name=redis-master22efb4af-25d0-11e4-a43e-005056b47e1e brendanburns/redis-slave <span style="background-color: rgb(255, 255, 102);">10.224.106.128/</span> name=redisslave,replicationController=redisSlaveController22efde60-25d0-11e4-a43e-005056b47e1e brendanburns/redis-slave <span style="background-color: rgb(102, 102, 204);">10.224.106.130/</span> name=redisslave,replicationController=redisSlaveController
[root@docker02 system]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES21e08fcdb6e2 brendanburns/redis-slave:latest /bin/sh -c /run.sh 7 minutes ago Up 7 minutes k8s--slave--22efb4af_-_25d0_-_11e4_-_a43e_-_005056b47e1e.etcd--ac5522f9 bda4f875e5b5 kubernetes/pause:latest /pause 7 minutes ago Up 7 minutes 0.0.0.0:6380->6379/tcp k8s--net--22efb4af_-_25d0_-_11e4_-_a43e_-_005056b47e1e.etcd--eb7a8b2a [root@docker03 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6b6e87b7b0c6 brendanburns/redis-slave:latest /bin/sh -c /run.sh 7 minutes ago Up 7 minutes k8s--slave--22efde60_-_25d0_-_11e4_-_a43e_-_005056b47e1e.etcd--bf57ab92 ce2d93576d11 kubernetes/pause:latest /pause 7 minutes ago Up 7 minutes 0.0.0.0:6380->6379/tcp k8s--net--22efde60_-_25d0_-_11e4_-_a43e_-_005056b47e1e.etcd--7df88eaf
创建Redis Slave Services
在创建完Slave Pods后, 接着创建Redis Slave Services, 执行如下命令:
[root@docker01 guestbook]# /opt/kubernetes/bin/kubecfg -h http://10.224.106.127:8080 -c redis-slave-service.json create servicesName Labels Selector Port---------- ---------- ---------- ----------redisslave name=redisslave name=redisslave 10001同Redis Master Services一样, Redis Slave Services也会在docker02和docker03上监听10001 port, 具体如下:
[root@docker02 system]# netstat -anpl | grep 10001tcp6 0 0 :::10001 :::* LISTEN 5385/proxy [root@docker03 ~]# netstat -anpl | grep 10001tcp6 0 0 :::10001 :::* LISTEN 5986/proxy
对于其它的操作, 比如list/delete pods, list/delete services等就不一一举例了, 具体操作可参考kubecfg的官方文档或者联系我. 如果文中有问题或错误, 欢迎大家提出以便修改.
参考资料
- http://developerblog.redhat.com/2014/07/31/getting-started-with-kubernetes-docker-on-fedora/
- https://github.com/GoogleCloudPlatform/kubernetes/blob/master/examples/guestbook/README.md
0 0
- Red Hat Enterprise Linux 7部署Google容器管理工具Kubernetes
- red hat enterprise linux
- Red Hat Enterprise Linux 7的新功能
- Red Hat Enterprise Linux 7(RHEL7)安装
- Red Hat Enterprise Linux 7 系统安装
- Red Hat Enterprise Linux 7 的安装
- Google容器管理工具Kubernetes简介
- Red Hat Linux Enterprise 5.3
- Red Hat Enterprise Linux系统管理
- Red Hat Enterprise Linux系统管理
- Linux-Red Hat Enterprise 6.0
- Red Hat Enterprise Linux 4
- Red Hat Enterprise Linux 7.3
- Red Hat Enterprise Linux 3 Red Hat Enterprise Linux 3 Red Hat Enterprise Linux 3 Red Hat Enterprise Linux 3 Red Hat Ente
- Red Hat Enterprise Linux 显示具体的Red Hat版本号
- Fedora Core 7 & Red Hat Enterprise Linux: The Complete Reference
- Red Hat Enterprise Linux 7(RHEL7)安装oracle11gr
- Red Hat Enterprise Linux 7 SystemTap Tapset Reference
- CVPR读书笔记[6]:Gabor特征提取
- Android AsyncTask 源码解析
- 社区打滚这么多年
- CentOS安装DDD
- Java工具链(一)--项目管理工具
- Red Hat Enterprise Linux 7部署Google容器管理工具Kubernetes
- 使用PinYin4j.jar将汉字转换为拼音
- Android:TextView点击效果
- 第三个驱动-tq2440
- hash之开放定址法解决冲突
- win8.1下安装deepin 2014经验
- LIBSVM使用
- Google容器管理工具Kubernetes简介
- POJ 1005 I Think I Need a Houseboat(水题)