June 24th, 2016
基于 Centos7 搭建Kubernetes (1.2/1.3版)环境准备
本示例基本环境由1个 master,和1个 node 构成.
可以通过 vagrant 来快速搭建两个 centos7 环境.
Vagrantfile 如下
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.define "master" do | host |
host.vm.hostname = "master"
host.vm.network "private_network", ip: "192.168.8.8"
host.vm.provider "virtualbox" do |v|
v.memory = 1024
end
end
config.vm.define "node" do | host |
host.vm.hostname = "node"
host.vm.network "private_network", ip: "192.168.8.9"
host.vm.provider "virtualbox" do |v|
v.memory = 2048
end
end
end
启动虚拟机
vagrant up
# 链接到 master
vagrant ssh master
# 链接到 node
vagrant ssh node
搭建 master
我们要使用 docker 来安装 master.
并且为了所有容器能够互通,我们采用 flannel 来构建网络.
本示例不需要在 master 上部署容器(不安装 kubelet 及 kube-proxy),所以不需要在 master 上安装 flannel.
只需要在 master 上安装 etcd 并配置 flannel 的属性.
在 master 上执行
#!/bin/bash
# Kubernetes 版本
# version=v1.2.4
version=v1.3.0
# 有条件的话 可以使用 官方 gcr.io/google_containers 的 kube-apiserver / kube-controller-manager / kube-scheduler
# 或者下载 https://github.com/kubernetes/kubernetes/releases/download/${version}/kubernetes.tar.gz
# 解压 kubernetes/server/kubernetes-server-linux-amd64.tar.gz
# 使用 docker load -i kubernetes/server/bin/kube-apiserver.tar
# 使用 docker load -i kubernetes/server/bin/kube-controller-manager.tar
# 使用 docker load -i kubernetes/server/bin/kube-scheduler.tar
# 把镜像导入到本地
# 安装 docker
sudo yum install docker -y
# 启动 docker
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
# 启动 etcd
sudo docker run -d -p 2379:2379 \
--restart=always \
--name etcd \
quay.io/coreos/etcd:v2.3.7 \
--advertise-client-urls http://0.0.0.0:2379 \
--listen-client-urls http://0.0.0.0:2379 \
--listen-peer-urls http://0.0.0.0:2380
# 启动 kube-apiserver
# ※ 使用 Docker 上的 starboychina/kube-apiserver 镜像
sudo docker run -d -p 8080:8080 \
--restart=always \
--name apiserver \
--link etcd:etcd \
starboychina/kube-apiserver:${version} \
--v=2 \
--etcd-servers=http://etcd:2379 \
--insecure-bind-address=0.0.0.0 \
--port=8080 \
--kubelet-port=10250 \
--allow-privileged=false \
--service-cluster-ip-range=10.254.0.0/16 \
--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota
# 启动 kube-controller-manager
# ※ 使用 Docker 上的 starboychina/kube-controller-manager 镜像
sudo docker run -d \
--restart=always \
--name controllermanager \
--link apiserver:apiserver \
starboychina/kube-controller-manager:${version} \
--logtostderr=true \
--master=http://apiserver:8080 \
--v=2
# 启动 kube-scheduler
# ※ 使用 Docker 上的 starboychina/kube-scheduler 镜像
sudo docker run -d \
--restart=always \
--name scheduler \
--link apiserver:apiserver \
starboychina/kube-scheduler:${version} \
--logtostderr=true \
--master=http://apiserver:8080 \
--v=2
# 配置 flannel 的属性
# /atomic.io/network 可以为任意值 后面启动 flannel 是需要用到
sudo docker exec etcd /etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'
搭建 node
# 安装 flannel 和 kubernetes-node
sudo yum -y install flannel kubernetes-node -y
# master IP
master=192.168.8.8
# node IP
node=192.168.8.9
# 启动 flanneld
sudo flanneld -etcd-endpoints=http://${master}:2379 -etcd-prefix=/atomic.io/network &
# 查看 /run/flannel/subnet.env
# 获取 FLANNEL_SUBNET
# 配置 docker 网络
sudo vi /usr/lib/systemd/system/docker.service
# 在 EnvironmentFile=-/etc/sysconfig/docker-network 上面追加
# EnvironmentFile=-/run/flannel/subnet.env
sudo vi /etc/sysconfig/docker-network
# 修改为
# DOCKER_NETWORK_OPTIONS="--bip=${FLANNEL_SUBNET} --ip-masq=true --mtu=1472"
# 启动 docker
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker
# 启动 kube-proxy
sudo kube-proxy --logtostderr=true --v=0 --master=http://${master}:8080 &
# 启动 kubelet
sudo kubelet --v=2 --api-servers=http://${master}:8080 --address=0.0.0.0 --port=10250 --hostname-override=${node} --allow-privileged=false &
※ 如果 node 需要使用 systemctl 启动的话 请参照 上述启动命令来配置 service
※ service 配置文件的路径可通过 systemctl status kubelet 来查看
验证
# 在任意一台安装 docker 的环境下执行
# master IP
master=192.168.8.8:8080
# 开放端口的 node IP
node=192.168.8.9
# 查看 master
sudo docker run -it --rm starboychina/kubectl -s ${master} cluster-info
# 查看 node
sudo docker run -it --rm starboychina/kubectl -s ${master} get nodes
# 部署一个 Replica Set
sudo docker run -it --rm starboychina/kubectl -s ${master} run home --image=ebusinessdocker/home --replicas=2
# 查看部署的 Replica Set
sudo docker run -it --rm starboychina/kubectl -s ${master} get rs
# 部署一个 service (开放端口)
# 通过 http://${node}:8081 来访问 部署的 home
# home-2491572331 为 get rs 所查到的 rs 的 name
sudo docker run -it --rm starboychina/kubectl -s ${master} expose rs home-2491572331 --port 8081 --target-port=80 --external-ip="${node}"
# 删除 Replica Set
sudo docker run -it --rm starboychina/kubectl -s ${master} delete deployment/home
# 删除 Repservice
sudo docker run -it --rm starboychina/kubectl -s ${master} delete service/home-2491572331
到此完成了,通过 Kubernetes 部署 一台 master 一个 node 并且在 node 上启动2个 homepage 容器,并且可以通过指定 IP及端口 访问部署的 homepage
如果需要部署个 node 请重复 [搭建 node] 过程