master:172.16.0.10,centos7,(etcd ,kube-apiserver,kube-controller-manager, kube-scheduler )
node01:192.168.12.175 172.16.0.8,centos7,(docker,kubelet,kube-proxy)
node02:172.16.0.9,centos7,(docker,kubelet,kube-proxy)
软件版本:
etcd:
2.3.7k8s :1.3.0
docker:1.10.3
pause:3.0
kubernetes运行Pods需要伴随运行一个叫 pause的镜像。但是Google pause这个镜像被墙了。
在境外docker服务器执行 docker pull 命令下载镜像
gcr.io/google_containers/pause:latest
再用导出镜像
docker save -o pause.tar gcr.io/google_containers/pause
gzip pause.tar
最后把这个包放到 kubernetes 环境所有的 docker 服务器上
docker load -i pause.tar.gz
1.部署master主机
1.1安装etcd:
yum install -y etcd
rpm -qc etcd
[root@master yum.repos.d]# grep -v ^# /etc/etcd/etcd.conf
ETCD_NAME=default
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://172.16.0.10:2379"
systemctl enable etcd.service
systemctl start etcd.service
systemctl status etcd.service
1.2部署k8s-master组件(apiserver+controller-manager+scheduler)
yum install -y kubernetes-master
[root@master yum.repos.d]# cd /etc/kubernetes/
[root@master kubernetes]# ll
total 16
-rw-r--r-- 1 root root 767 Dec 16 00:59 apiserver
-rw-r--r-- 1 root root 655 Dec 16 00:59 config
-rw-r--r-- 1 root root 189 Dec 16 00:59 controller-manager
-rw-r--r-- 1 root root 111 Dec 16 00:59 scheduler
[root@master kubernetes]# grep -v "^#" /etc/kubernetes/config |grep -v "^$"
KUBE_LOGTOSTDERR="--logtostderr=true"
KUBE_LOG_LEVEL="--v=0"
KUBE_ALLOW_PRIV="--allow-privileged=false"
KUBE_MASTER="--master=http://172.16.0.10:8080"
[root@master kubernetes]# grep -v "^#" /etc/kubernetes/apiserver |grep -v "^$"
KUBE_API_ADDRESS="--insecure-bind-address=0.0.0.0"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.12.174:2379"
KUBE_SERVICE_ADDRESSES="--service-cluster-ip-range=10.254.0.0/16"
KUBE_ADMISSION_CONTROL="--admission-control=NamespaceLifecycle,NamespaceExists,LimitRanger,SecurityContextDeny,ResourceQuota"
KUBE_API_ARGS=""
#注意,--admission-control参数里没有ServiceAccount
[root@master kubernetes]# grep -v "^#" /etc/kubernetes/controller-manager
KUBE_CONTROLLER_MANAGER_ARGS=""
systemctl enable kube-apiserver.service kube-controller-manager.service kube-scheduler.service
systemctl start kube-apiserver.service kube-controller-manager.service kube-scheduler.service
systemctl status kube-apiserver.service kube-controller-manager.service kube-scheduler.service
2.部署node主机
2.1部署k8s-node组件
修改hosts文件
172.16.0.8 node172.16.0.9 node2
yum install kubernetes-node -y
centos7系统采用open vswitch实现不同物理服务器/虚拟机上的docker容器互联。
环境:
node01:172.16.0.8,docker容器内网地址段:172.17.1.0/24
node02:172.16.0.9,docker容器内网地址段:172.17.2.0/24
chkconfig docker on
安装openvswitch rpm包
rpm -ivh http://mirror.centos.org/centos/7/cloud/x86_64/openstack-mitaka/common/openvswitch-2.5.0-2.el7.x86_64.rpm
systemctl start openvswitch.service
chkconfig openvswitch on
4.node01和node02 配置OVS Bridge及GRE
规划:
node01:容器内地址段172.17.1.0/24,新网桥:kbr0,GRE:gre0
node02:容器内地址段172.17.2.0/24,新网桥:kbr0,GRE:gre0
4.1 node01:部署
开启ip转发:cat /proc/sys/net/ipv4/ip_forward,显示为1,表示开启。
ip转发开启方法:
echo 1 > /proc/sys/net/ipv4/ip_forward (立即生效)
vi /etc/sysctl.conf添加
net.ipv4.ip_forward = 1 (重启生效)
ovs-vsctl add-br obr0
ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=172.16.0.9
service docker stop
brctl addbr kbr0
brctl addif kbr0 obr0
ip link set dev docker0 down
ip link del dev docker0
[root@node ~]# cat /etc/sysconfig/network-scripts/route-eth0
172.17.2.0/24 via 172.16.0.8 dev eth0
vi /etc/sysconfig/network-scripts/ifcfg-kbr0
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.1.1
NETMASK=255.255.255.0
GATEWAY=172.17.1.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
[root@node ~]# cat /etc/sysconfig/docker |grep OPTIONS
OPTIONS='--selinux-enabled --log-driver=journald -b=kbr0'
4.2 node02:部署(重启上述部署,注意修改相应的地址)
echo 1 > /proc/sys/net/ipv4/ip_forward (立即生效)
vi /etc/sysctl.conf添加
net.ipv4.ip_forward = 1 (重启生效)
ovs-vsctl add-br obr0
ovs-vsctl add-port obr0 gre0 -- set Interface gre0 type=gre options:remote_ip=172.16.0.8
service docker stop
brctl addbr kbr0
brctl addif kbr0 obr0
ip link set dev docker0 down
ip link del dev docker0
[root@node ~]# cat /etc/sysconfig/network-scripts/route-eth0
172.17.1.0/24 via 172.16.0.8 dev eth0
[root@node ~]# cat /etc/sysconfig/docker |grep OPTIONS
OPTIONS='--selinux-enabled --log-driver=journald -b=kbr0'
vi /etc/sysconfig/network-scripts/ifcfg-kbr0
DEVICE=kbr0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.17.2.1
NETMASK=255.255.255.0
GATEWAY=172.17.2.0
USERCTL=no
TYPE=Bridge
IPV6INIT=no
node02:ping 即对端node01主机及node01容器网关 172.17.1.1。