在RHEL7上搭建kubernetes 1.11集群

在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结点,容错性比较差。