====== 搭建Kubernetes集群环境 ====== [[https://kubernetes.io/|Kubernetes]]是一个开源的容器编排系统,本文讲述一个简单的Kubernetes集群的搭建过程。 参考链接: * [[https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/|Installing kubeadm]] * [[https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/|Creating a single control-plane cluster with kubeadm]] ===== 环境准备 ===== 我们在三台CentOS 7的KVM虚拟机上搭建环境: - cet7-k8s-1,192.168.122.205 - cet7-k8s-2,192.168.122.64 - cet7-k8s-3,192.168.122.176 其中cet7-k8s-1是主节点(master),其余两台是worker节点。 下面的操作除非特别申明,在每个节点上都要进行。 ==== 关闭selinux ==== 编辑/etc/sysconfig/selinux,将enforcing改为disabled: SELINUX=disabled ==== 关闭防火墙 ==== Kubernetes运行时需要开放几个端口,这里是测试环境,就暂时将防火墙关闭了: # systemctl stop firewalld # systemctl disable firewalld ==== 关闭交换区 ==== # swapoff -a 编辑/etc/fstab,注释掉swap分区行,例如: #/dev/mapper/centos-swap swap swap defaults 0 0 ===== 安装docker ===== Kubernetes支持多个容器运行时runtime,这里使用docker。 在每个节点机器安装docker: # yum install docker 启动docker: # systemctl enable docker # systemctl start docker ===== 网络与代理 ===== Kubernetes的安装过程中需要访问外网,如果集群因安全等原因无法直接联网,也可通过代理方式进行访问。 ==== 命令行应用 ===== 对于命令行应用,比如下面的kubeadm,可设置如下的环境变量来访问代理(假设http代理服务器IP为192.168.122.1,端口8118): export http_proxy=http://192.168.122.1:8118 export https_proxy=http://192.168.122.1:8118 此外,集群节点之间不通过代理: export no_proxy=localhost,localhost.,192.168.122.205,192.168.122.64,192.168.122.176 ==== docker守护进程 ==== 对于docker守护进程,需要修改docker配置文件来设置代理: # mkdir /etc/systemd/system/docker.service.d # cd /etc/systemd/system/docker.service.d 新建http_proxy.conf: [Service] Environment="HTTP_PROXY=http://192.168.122.1:8118/" "HTTPS_PROXY=https://192.168.122.1:8118/" "NO_PROXY=localhost,localhost.,192.168.122.205,192.168.122.64,192.168.122.176" 使配置生效: # systemctl daemon-reload # systemctl restart docker 检验设置是否正确: # systemctl show --property=Environment docker ===== 安装kubeadm ===== 在每个节点上安装kubelet、kubectl、kubeadm。 首先设置kubernetes源: # cat </etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kube* EOF 安装: # yum install kubelet kubectl kubeadm --disableexcludes=kubernetes 缺省安装的是最新版本,也可安装特定版本: # yum install kubelet-1.11.3-0 kubectl-1.11.3-0 kubeadm-1.11.3-0 --disableexcludes=kubernetes 设置sysctl: # cat </etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF 使其生效: # sysctl --system 启动kubelet: # systemctl enable kubelet # systemctl start kubelet ===== 集群初始化 ===== 一切准备就绪,就可以开始集群的初始化工作了。 初始化只在master节点进行。 期间会下载一些docker镜像,为了检测网络是否通畅,可以先下载镜像: # kubeadm config images pull [config/images] Pulled k8s.gcr.io/kube-apiserver-amd64:v1.11.3 [config/images] Pulled k8s.gcr.io/kube-controller-manager-amd64:v1.11.3 [config/images] Pulled k8s.gcr.io/kube-scheduler-amd64:v1.11.3 [config/images] Pulled k8s.gcr.io/kube-proxy-amd64:v1.11.3 [config/images] Pulled k8s.gcr.io/pause:3.1 [config/images] Pulled k8s.gcr.io/etcd-amd64:3.2.18 [config/images] Pulled k8s.gcr.io/coredns:1.1.3 执行初始化: # kubeadm init 成功后,会生成如下的命令,其他worker节点可执行该命令加入集群: # kubeadm join 192.168.122.205:6443 --token 89duwd.yhz457x4hrs7wjzi --discovery-token-ca-cert-hash sha256:b0a429dade431cb040fd10956a740549c77a013f3a131e069933332298bb9579 进行后续的管理工作之前,对普通用户,需做如下设置: $ mkdir -p $HOME/.kube $ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config $ sudo chown $(id -u):$(id -g) $HOME/.kube/config 如果是root,则设置如下环境变量: # export KUBECONFIG=/etc/kubernetes/admin.conf 现在集群还不可用,需要安装一个网络插件,这里用的是weave: # kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" ===== 加入集群 ===== 在worker节点上,执行上述生成的join命令,加入集群: # kubeadm join 192.168.122.205:6443 --token 89duwd.yhz457x4hrs7wjzi --discovery-token-ca-cert-hash sha256:b0a429dade431cb040fd10956a740549c77a013f3a131e069933332298bb9579 ===== 完成 ===== 在主节点上执行: $ kubectl get nodes NAME STATUS ROLES AGE VERSION cet7-k8s-1 Ready master 37d v1.13.1 cet7-k8s-2 Ready 37d v1.13.1 cet7-k8s-3 Ready 37d v1.13.1 可以看到,所有节点已经就绪。 至此,一个基本的Kubernetes集群就搭建起来了。 {{tag>Kubernetes}}