在RHEL7的虚拟机上搭建一个kubernetes 1.11集群,环境如下
master: 192.168.10.1
node1: 192.168.10.2
node2: 192.168.10.3
1. 安装docker
根据kubernetes官方文档,推荐使用docker 17.03版本,17.06以上的版本没有经过测试。
yum install -y –setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos \
docker-ce-selinux-17.03.2.ce-1.el7.centos
2. 配置docker
将/usr/lib/systemd/system/docker.service拷贝到/etc/systemd/system/docker.service
添加如下配置条目
ExecStartPost=/usr/sbin/iptables -w -P FORWARD ACCEPT
设置开机启动docker daemon
systemctl daemon-reload
systemctl enable docker.service
sytemctl start docker.service
注意:如果在公司环境下,可能需要在/etc/systemd/system/docker.services中配置代理服务器。
3. 安装kubeadm, kubectl和kubelet
kubernetes官方的yum repository在国内正常是无法访问的,这里使用阿里云的yum repository
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
运行如下命令安装rpm包:
yum install -y kubeadm kubelet kubectl
配置开机时启动kubelet进程:
systemctl enable kubelet
注意:kubeadm 1.11可以检测到docker的cgroup driver然后用相同的cgroup driver启动kubelet
4. 安装ipvsadm
kubernetes 1.11默认使用ipvs在集群内部对service进行load balancing,用如下命令安装ipvsadm
yum install -y ipvsadm
5. 配置ipvsadm
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack_ipv4
EOF
6. 配置linux
禁用selinux:
sed -i ‘/^SELINUX=.*$/s/^SELINUX=.*$/SELINUX=disabled/’ /etc/sysconfig/selinux
setenforce 0
关闭swap分区:
sed -r -s -i -e ‘/^[^#].*\s+swap\s+swap\s+/s/^([^#])/#\1/’ /etc/fstab
配置转发相关参数:
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
7. 重启linux OS
reboot
8. 生成kubernetes master的配置文件
cat >kubeadm-master.config<<EOF apiVersion: kubeadm.k8s.io/v1alpha2 kind: MasterConfiguration kubernetesVersion: v1.11. imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers1 api: advertiseAddress: 192.168.10.1 controllerManagerExtraArgs: node-monitor-grace-period: 10s pod-eviction-timeout: 10s networking: podSubnet: 10.244.0.0/16 kubeProxy: config: mode: ipvs EOF
注意:
把adertiseAddress换成你自己的IP地址。
如果你不使用flannel组件,可能需要对podSubnet进行相应修改。
9,在master上下载docker image
kubeadmin config images pull –config kubeadm-master.config
10. 在master上运行kubeadm init
kubeadmin config images pull –config kubeadm-master.config
11. 在master生成kubectl配置文件
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
12. 使用flannel网络组件
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml
13. 将node结点加入到集群中
kubeadm join 192.168.10.1:6443 –token fdsfsa.lfdsdsvzqle –discovery-token-ca-cert-hash sha256:32f933ca83af46a655cd5833777ac4b47e2b95ec7f630e68ddd50b594b3fcdae
14. 在master检查集群的状态
kubectl get nodes
kubectl get cs
这样一个简单的kubernetes集群就搭建好了。这样的集群只能用来进行开发,不能用于生产环境。毕竟这个集群只有一个master结点,容错性比较差。