在完成科学上网的前提下,我们准备使用kubeadm通过http代理部署Kubernetes。
部署方案
hostname | IP | 角色 | 组件 |
---|---|---|---|
k8s-master01 | 10.200.112.111 | master | keepalived、nginx、etcd、kubelet、kube-apiserver |
k8s-master02 | 10.200.112.112 | master | keepalived、nginx、etcd、kubelet、kube-apiserver |
k8s-master03 | 10.200.112.113 | master | keepalived、nginx、etcd、kubelet、kube-apiserver |
k8s-node01 | 10.200.112.114 | node | kubelet、kube-proxy |
10.200.112.100 | master-vip | 无 |
openstack上创建实例
以boot from volume方式创建4个docker实例(已初始化安装docker-ce-18.03.1),并指定固定IP,手动创建k8s-master-vip的port端口,避免该IP被分配到其他虚拟机中
1 | cinder snapshot-list |
openstack上禁用master节点的安全组
由于OpenStack Neutron的安全组默认会对每个网口开启MAC/IP过滤功能(防arp欺骗),不是该网口的MAC/IP发出的包会被宿主机丢弃。因此需要将3个运行keepalived的master节点的安全组禁用,否则keepalived的backup节点无法通过收到vrrp的通告报文,将导致3个节点都是master。
1 | openstack port list|grep 10.200.112.11[1-3] |
环境准备[all_node]
版本信息
Linux版本:
1
2cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)内核版本:
1
2uname -r
4.18.11-1.el7.elrepo.x86_64docker版本
docker-ce-18.06
存在http代理失败的问题1
2docker -v
Docker version 18.03.1-ce, build 9ee9f40
配置docker http代理
1 | vim /etc/hosts |
安装所需软件
可使用阿里云的kubernetes源
1 | cat > /etc/yum.repos.d/kubernetes.repo <<EOF |
开启ipvs
从kubernetes1.8版本开始,新增了kube-proxy对ipvs的支持,并在1.11版本中实现了GA(General Availability)。
1 | yum -y install ipvsadm |
获取所需docker镜像
通过kubeadm获取基础组件镜像清单
1 | kubeadm config images list --kubernetes-version=v1.11.3 |
通过kubeadm拉取基础镜像
1 | kubeadm config images pull --kubernetes-version=v1.11.3 |
配置nginx和keepalived[master]
nginx
nginx实现master节点的4层TCP反向代理
1 | mkdir /root/k8s-cluster |
keepalived
keepalived实现k8s-master节点的kube-apiserver服务之间的failover。(必须先启用ip_vs)
1 | docker run -d --name k8s-keepalived --restart=always --net=host --cap-add=NET_ADMIN \ |
配置master[master]
k8s-master01
生成配置文件
1 | cat > /root/k8s-cluster/kubeadm-config.yaml <<EOF |
初始化kubernetes集群
若初始化失败需要通过
kubeadm reset
清理环境后重新初始化。
1 | kubeadm init --config /root/k8s-cluster/kubeadm-config.yaml |
配置使用kubectl
1 | su - kubernetes |
打包相关证书到其他master节点
1 | cd /etc/kubernetes |
k8s-master02
生成配置文件
1 | cat > /root/k8s-cluster/kubeadm-config.yaml <<EOF |
配置kubelet
1 | tar zxf /etc/kubernetes/k8s-key.tar.gz -C /etc/kubernetes/ |
添加etcd到集群中
1 | export CP0_IP="10.200.112.111" |
启动master节点服务
1 | kubeadm alpha phase kubeconfig all --config /root/k8s-cluster/kubeadm-config.yaml |
配置使用kubectl(可选)
1 | su - kubernetes |
k8s-master03
生成配置文件
1 | cat > /root/k8s-cluster/kubeadm-config.yaml <<EOF |
配置kubelet
1 | tar zxf /etc/kubernetes/k8s-key.tar.gz -C /etc/kubernetes/ |
添加etcd到集群中
1 | export CP0_IP="10.200.112.111" |
启动master节点服务
1 | kubeadm alpha phase kubeconfig all --config /root/k8s-cluster/kubeadm-config.yaml |
配置使用kubectl(可选)
1 | su - kubernetes |
部署Pod网络(Fannel)[any master]
确保Pod网络的
Network
与kubeadm配置的podSubnet
一致
1 | $ wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml |
部署node节点[node]
1 | kubeadm join 10.200.112.110:8443 --token qis1en.sh1k760bz9bei877 --discovery-token-ca-cert-hash sha256:5e2687c96590e28392c193e355cb6000adf7ce35891df4fad5809ca33316b738 |
1 | $ kubectl get node |