Kubernetes是一个开源平台,用于管理由Google开发的容器化应用程序。它允许您在集群环境中管理,扩展和自动部署容器化应用程序。使用Kubernetes,我们可以跨多个主机协调我们的容器,使用所有资源即时扩展容器化应用程序,并拥有集中的容器管理环境。
在本教程中,我将逐步向您展示如何在CentOS 7上安装和配置Kubernetes。我们将使用1台服务器'k8s-master'作为Kubernetes Host Master,2台服务器作为Kubernetes节点,'node01'和'node02'。
在第一步中,我们将为Kubernetes安装准备这3台服务器,因此在主服务器和节点服务器上运行所有命令。
我们将通过更改服务器上的现有配置以及安装一些软件包(包括docker-ce和kubernetes本身)来为Kubernetes安装准备所有服务器。
使用vim编辑器在所有服务器上编辑hosts文件 。
vim /etc/hosts
粘贴下面的主机列表。
10.0.15.10 k8s-master
10.0.15.21 node01
10.0.15.22 node02
保存并退出。
在本教程中,我们不会介绍Docker的SELinux配置,因此我们将禁用它。
运行以下命令以禁用SELinux。
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
kubernetes安装需要br_netfilter模块。启用此内核模块,以便iptables处理遍历网桥的数据包以进行过滤和端口转发,并且群集中的kubernetes pod可以相互通信。
运行以下命令以启用br_netfilter内核模块。
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
通过运行以下命令禁用用于kubernetes安装的SWAP。
swapoff -a
然后编辑'/ etc / fstab'文件。
vim /etc/fstab
注释交换行UUID如下。
从docker存储库安装最新版本的Docker-ce。
安装docker-ce的软件包依赖项。
yum install -y yum-utils device-mapper-persistent-data lvm2
将docker存储库添加到系统并使用yum命令安装docker-ce。
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce
等待docker-ce安装。
通过运行以下命令将kubernetes存储库添加到centos 7系统。
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
EOF
现在使用下面的yum命令安装kubernetes包kubeadm,kubelet和kubectl。
yum install -y kubelet kubeadm kubectl
安装完成后,重新启动所有这些服务器。
sudo reboot
再次登录到服务器并启动服务,docker和kubelet。
systemctl start docker && systemctl enable docker
systemctl start kubelet && systemctl enable kubelet
我们需要确保docker-ce和kubernetes使用相同的'cgroup'。
使用docker info命令检查docker cgroup。
docker info | grep -i cgroup
你看到docker正在使用' cgroupfs '作为cgroup-driver。
现在运行以下命令将kuberetes cgroup-driver更改为'cgroupfs'。
sed -i 's/cgroup-driver=systemd/cgroup-driver=cgroupfs/g' /etc/systemd/system/kubelet.service.d/10-kubeadm.conf
重新加载systemd系统并重新启动kubelet服务。
systemctl daemon-reload
systemctl restart kubelet
现在我们已准备好配置Kubernetes集群。
在此步骤中,我们将初始化kubernetes主集群配置。
将shell移动到主服务器'k8s-master'并运行以下命令来设置kubernetes master。
kubeadm init --apiserver-advertise-address=10.0.15.10 --pod-network-cidr=10.244.0.0/16
注意:
--apiserver-advertise-address =确定Kubernetes应该在哪个IP地址上公布其API服务器。
--pod-network-cidr =指定pod网络的IP地址范围。我们正在使用'法兰绒'虚拟网络。如果要使用其他pod网络(如weave-net或calico),请更改范围IP地址。
Kubernetes初始化完成后,您将得到如下结果。
注意:
将' kubeadm join ... ... ... '命令复制到文本编辑器。该命令将用于向kubernetes集群注册新节点。
现在为了使用Kubernetes,我们需要在结果上运行一些命令。
创建新的“.kube”配置目录并复制配置“admin.conf”。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
接下来,使用kubectl命令将flannel网络部署到kubernetes集群。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
法兰绒网络已部署到Kubernetes集群。
等一下,然后使用下面的命令检查kubernetes节点和pod。
kubectl get nodes
kubectl get pods --all-namespaces
您将获得'k8s-master'节点作为“主”群集运行,状态为“就绪”,您将获得群集所需的所有pod,包括用于网络pod的'kube-flannel-ds'组态。
确保所有kube-system pods状态为“正在运行”。
Kubernetes集群主机初始化和配置已完成。
在此步骤中,我们将添加node01和node02以加入'k8s'集群。
连接到node01服务器并在我们复制到顶部时运行kubeadm join命令。
kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e
连接到node02服务器并运行kubeadm join命令,因为我们复制在顶部。
kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e
等待几分钟后返回'k8s-master'主集群服务器,使用以下命令检查节点和pod。
kubectl get nodes
kubectl get pods --all-namespaces
现在,您将获得node01,并且node02已添加到状态为“ready”的群集中。
node01和node02已添加到kubernetes集群中。
在此步骤中,我们将通过将Nginx pod部署到kubernetes集群来进行测试。pod是一组包含共享存储和网络的一个或多个容器,在Kubernetes下运行。Pod包含一个或多个容器,例如Docker容器。
登录到'k8s-master'服务器并使用kubectl命令创建名为'nginx'的新部署。
kubectl create deployment nginx --image=nginx
要查看“nginx”部署sepcification的详细信息,请运行以下命令。
kubectl describe deployment nginx
您将获得nginx pod部署规范。
接下来,我们将展示可通过互联网访问的nginx pod。我们需要为此创建新的服务NodePort。
运行下面的kubectl命令。
kubectl create service nodeport nginx --tcp=80:80
确保没有错误。现在使用下面的kubectl命令检查nginx服务nodeport和IP。
kubectl get pods
kubectl get svc
现在,您将获得nginx pod现在在群集IP地址'10 .160.60.38'端口80下运行,以及端口'30691'上的节点主IP地址'10 .0.15.x'。
从'k8s-master'服务器运行 下面的curl命令。
curl node01:30691
curl node02:30691
Nginx Pod现已部署在Kubernetes集群下,可通过互联网访问。
现在从Web浏览器访问。
http://10.0.15.10:30691/
您将获得Nginx默认页面。
在node02服务器上 - http://10.0.15.11:30691/
CentOS 7上的Kubernetes集群安装和配置已成功完成。
关于穆罕默德阿鲁尔
Muhammad Arul是一名自由系统管理员和技术作家。他在Linux Environments工作超过5年,是一名开源爱好者,并且在Linux安装和故障排除方面积极主动。主要使用RedHat / CentOS Linux和Ubuntu / Debian,Nginx和Apache Web服务器,Proxmox,Zimbra管理和网站优化。目前正在学习OpenStack和容器技术。
转载来源:https://www.howtoforge.com/tutorial/centos-kubernetes-docker-cluster/