如何在CentOS 7上安装Kubernetes Docker集群
Kubernetes是一个管理由Google开发的容器化应用程序的开源平台。 它允许您在集群环境中管理,扩展和自动部署容器化应用程序。 借助Kubernetes,我们可以在多台主机上编排我们的容器,随时随地利用所有资源扩展容器化的应用程序,并拥有集中的容器管理环境。
在本教程中,我将逐步向您介绍如何在CentOS 7上安装和配置Kubernetes。我们将使用1台服务器'k8s-master'作为Kubernetes主机主机,以及2台服务器作为Kubernetes节点'node01'和'node02'。
先决条件
- 3个CentOS 7服务器
- 10.0.15.10 k8s-master
- 10.0.15.21 node01
- 10.0.15.22 node02
- 根特权
我们将要做什么?
- Kubernetes安装
- Kubernetes群集初始化
- 将node01和node02添加到群集
- 测试 - 创建第一个Pod
第1步 - Kubernetes安装
在第一步中,我们将为这3台服务器准备Kubernetes安装,因此请在主服务器和节点服务器上运行所有命令。
我们将通过更改服务器上的现有配置,并安装一些软件包(包括docker-ce和kubernetes本身)来为Kubernetes安装准备所有服务器。
- 配置主机
使用vim编辑器在所有服务器上编辑主机文件。
vim /etc/hosts
在下面粘贴主持人的名单。
10.0.15.10 k8s-master
10.0.15.21 node01
10.0.15.22 node02
保存并退出。
- 禁用SELinux
在本教程中,我们不会介绍Docker的SELinux配置,因此我们将禁用它。
运行下面的命令来禁用SELinux。
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
- 启用br_netfilter内核模块
kubernetes安装需要br_netfilter模块。 启用此内核模块,以便遍历桥的数据包由iptables进行处理以进行过滤和端口转发,并且群集中的kubernetes窗格可以相互通信。
运行以下命令启用br_netfilter内核模块。
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
- 禁用SWAP
通过运行以下命令禁用kubernetes安装的SWAP。
swapoff -a
然后编辑'/ etc / fstab'文件。
vim /etc/fstab
如下所示评论交换行UUID。
- 安装Docker CE
从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
通过运行以下命令将kubernetes存储库添加到centos 7系统。
cat <<EOF > /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
- 更改cgroup-driver
我们需要确保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群集。
第2步 - Kubernetes群集初始化
在这一步中,我们将初始化kubernetes主集群配置。
将shell移至主服务器'k8s-master'并运行以下命令以设置kubernetes主服务器。
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命令将法兰绒网络部署到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'节点作为状态为'ready'的'master'群集运行,你将得到群集所需的所有pod,包括网络pod的'kube-flannel-ds'组态。
确保所有kube-system豆荚状态都是“正在运行”。
Kubernetes集群主机初始化和配置已完成。
第3步 - 将node01和node02添加到群集
在这一步中,我们将添加node01和node02以加入'k8s'集群。
连接到node01服务器并运行我们在顶部复制的kubeadm连接命令。
kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e
连接到node02服务器并运行我们在顶部复制的kubeadm连接命令。
kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e
等待几分钟后回到'k8s-master'主集群服务器,使用以下命令检查节点和窗格。
kubectl get nodes
kubectl get pods --all-namespaces
现在您将获得node01,node02已添加到状态为“ready”的群集中。
node01和node02已添加到kubernetes群集中。
第4步 - 测试创建第一个Pod
在这一步中,我们将通过将Nginx pod部署到kubernetes集群来进行测试。 一个容器是一组一个或多个容器,共享存储和网络在Kubernetes下运行。 一个Pod包含一个或多个容器,比如Docker容器。
登录到'k8s-master'服务器,并使用kubectl命令创建名为'nginx'的新部署。
kubectl create deployment nginx --image=nginx
要查看'nginx'部署规范的详细信息,请运行以下命令。
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集群下,可以通过互联网访问。
现在从网络浏览器访问。
http://10.0.15.10:30691/
你会得到Nginx的默认页面。
在node02服务器上 - http://10.0.15.11:30691/
Kubernetes集群CentOS 7上的安装和配置已成功完成。