如何在 CentOS 7 上安装 Kubernetes Docker 集群使用国内镜像

Kubernetes 是一个开源平台,用于管理容器化应用程序。它允许您在集群环境中管理、扩展和自动部署容器化应用程序。使用 Kubernetes,我们可以跨多个主机编排容器,动态扩展包含所有资源的容器化应用程序,并拥有集中的容器管理环境。

在本教程中,我将逐步向您展示如何在 CentOS 7 上安装和配置 Kubernetes。我们将使用 1 个服务器“k8s-master”作为 Kubernetes Host Master,使用 2 个服务器作为 Kubernetes 节点“node01”和'node02'。

先决条件

  • 3 台 CentOS 7 服务器
    • 10.0.15.10      k8s-master
    • 10.0.15.21      node01
    • 10.0.15.22      node02
  • 根权限

我们要做什么?

  1. Kubernetes 安装
  2. Kubernetes 集群初始化
  3. 将 node01 和 node02 添加到集群
  4. 测试 - 创建第一个 Pod

第 1 步 - Kubernetes 安装

在第一步中,我们将为 Kubernetes 安装准备这 3 个服务器,因此在主服务器和节点服务器上运行所有命令。

我们将通过更改服务器上的现有配置,并安装一些包,包括 docker-ce 和 kubernetes 本身,为 Kubernetes 安装准备所有服务器。

- 配置主机

使用vi编辑所有服务器上的hosts文件 。

vi /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 pods可以相互通信。

运行以下命令以启用 br_netfilter 内核模块。

modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

- 禁用交换

通过运行以下命令为 kubernetes 安装禁用 SWAP。

swapoff -a

禁用交换

然后编辑“/etc/fstab”文件。

vi /etc/fstab

注释掉交换行 UUID,如下所示。

编辑 /etc/fstab

- 安装 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 安装。

安装 Docker

- 安装 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

国内通过运行以下命令将 kubernetes 存储库添加到 centos 7 系统。

# cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

现在使用下面的 yum 命令安装 kubernetes 包 kubeadm、kubelet 和 kubectl。

yum install -y kubelet kubeadm kubectl

安装 Kubernetes

安装完成后,重新启动所有这些服务器。

# shutdown -r 0

再次登录服务器,启动服务,docker和kubelet。

systemctl start docker && systemctl enable docker
systemctl start kubelet && systemctl enable kubelet

第 2 步 - Kubernetes 集群初始化

在这一步中,我们将初始化 kubernetes 主集群配置。

将 shell 移动到主服务器“k8s-master”并运行以下命令来设置 kubernetes 主服务器。

kubeadm init --apiserver-advertise-address=10.0.15.10 --pod-network-cidr=10.244.0.0/16

国内将 shell 移动到主服务器“k8s-master”并运行以下命令来设置 kubernetes 主服务器。

# kubeadm init \
  --apiserver-advertise-address=10.0.15.10 \
  --image-repository registry.aliyuncs.com/google_containers \
  --pod-network-cidr=10.244.0.0/16

Kubernetes 集群初始化

如果出现如下问题:
[kubelet-check] It seems like the kubelet isn’t running or healthy.
[kubelet-check] The HTTP call equal to ‘curl -sSL http://localhost:10248/healthz’ failed with error: Get http://localhost:10248/healthz: dial tcp 127.0.0.1:10248: connect: connection refused.

这是cgroup驱动问题。默认情况下Kubernetes cgroup驱动程序设置为system,但docker设置为systemd。我们需要更改Docker cgroup驱动,通过创建配置文件/etc/docker/daemon.json并添加以下行:

{"exec-opts": ["native.cgroupdriver=systemd"]}

为使配置生效,你必须重启docker和kubelet。

systemctl daemon-reload
systemctl restart docker
systemctl restart kubelet

如果执行过程意外中断,可以重置后再次初始化

kubeadm reset

询问是否时输入:y

笔记:

--apiserver-advertise-address = 确定 Kubernetes 应该在哪个 IP 地址上宣传其 API 服务器。

--pod-network-cidr = 指定 pod 网络的 IP 地址范围。我们正在使用“法兰绒”虚拟网络。如果要使用其他 pod 网络,例如 weave-net 或 calico,请更改范围 IP 地址。

Kubernetes 初始化完成后,您将得到如下结果。

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 加入

flannel 网络已经部署到 Kubernetes 集群。

等待一分钟,然后使用以下命令检查 kubernetes 节点和 pod。

kubectl get nodes
kubectl get pods --all-namespaces

您将获得“k8s-master”节点作为“master”集群运行且状态为“ready”,您将获得集群所需的所有 pod,包括网络 pod 的“kube-flannel-ds”配置。

确保所有 kube-system pod 状态为“正在运行”。

检查 Kubernetes 节点

Kubernetes集群master初始化和配置已经完成。

步骤 3 - 将 node01 和 node02 添加到集群

在这一步中,我们将添加 node01 和 node02 以加入“k8s”集群。

连接到 node01 服务器并运行我们在顶部复制的 kubeadm join 命令。

kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

将 node01 和 node02 添加到集群

连接到 node02 服务器并运行我们在顶部复制的 kubeadm join 命令。

kubeadm join 10.0.15.10:6443 --token vzau5v.vjiqyxq26lzsf28e --discovery-token-ca-cert-hash sha256:e6d046ba34ee03e7d55e1f5ac6d2de09fd6d7e6959d16782ef0778794b94c61e

连接 Docker 节点

等待几分钟,然后返回到“k8s-master”主集群服务器,使用以下命令检查节点和 pod。

kubectl get nodes
kubectl get pods --all-namespaces

现在您将获得 node01 和 node02 已添加到状态为“就绪”的集群。

kubctl 命令

node01 和 node02 已添加到 kubernetes 集群中。

第 4 步 - 测试创建第一个 Pod

在这一步中,我们将通过将 Nginx pod 部署到 kubernetes 集群来进行测试。Pod 是一组在 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

创建第一个 Pod

确保没有错误。现在使用下面的 kubectl 命令检查 nginx 服务节点端口和 IP。

kubectl get pods
kubectl get svc

获取 Pod 列表

现在您将获得 nginx pod 现在在集群 IP 地址“10.160.60.38”端口 80 下运行,节点主 IP 地址“10.0.15.x”在端口“30691”下运行。

从“k8s-master”服务器运行 下面的curl 命令

curl node01:30691

用 curl 测试

curl node02:30691

使用 curl 测试节点 2

Nginx Pod 现在已经部署在 Kubernetes 集群下,可以通过互联网访问。

现在从网络浏览器访问。

http://10.0.15.10:30691/

您将获得 Nginx 默认页面。

节点 1 上的页面

在 node02 服务器上 - http://10.0.15.11:30691/

节点 2 上的页面

Kubernetes集群在CentOS 7上的安装和配置已经成功完成。

参考

原文地址:https://blog.csdn.net/allway2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


最近一直在开发Apworks框架的案例代码,同时也在一起修复Apworks框架中的Bug和一些设计上的不足。遇到的一个普遍问题是,代码的调试过程需要依赖很多外部系统,比如MongoDB、PostgreSQL、RabbitMQ等。当然可以在本机逐一安装这些服务,然后对服务进行配置,使其满足自己开发调试
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。在文本发布和处理微服务中,我打算使用微软的SQL Server for Linux来做演示,于是也就在自己的docker-compose中加入了MS SQL Server的服务。其实在Docker中运行SQL Server是非常容
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,我快速介绍了Kubernetes中分布式存储Rook-Ceph的部署过程,这里介绍如何在部署于Kubernetes的ASP.NET Core MVC的应用程序中使用Rook-Ceph所创建的存储对象。 构建ASP.NET C
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也抽空多了解了一些。项目主要基于Rook-Ceph运行,考虑到Rook-Ceph部署也不那么简单,官方文档的步骤起点也不算低,因此,在整合官方文档的某些步骤的基础上,写篇文章简单总结一下。 Rook-Ceph是Kubernetes中分布
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
构建镜像最具挑战性的一点是使镜像大小尽可能的小。Dockerfile中的每条指令都为图像添加了一个图层,您需要记住在移动到下一层之前清理任何不需要的工件。对于多阶段构建,您可以在Dockerfile中使用多个FROM语句。每个FROM指令可以使用不同的基础,并且每个指令都开始一个新的构建。您可以选择
本文介绍compose配置文件参数的使用,熟练编写compose文件 [root@docker lnmp]# cat lnmp.yaml version: &#39;3&#39; services: nginx: build: /root/docker_demo/nginx/ ports: - &q
环境 docker-machine主机:192.168.1.9 docker主机:192.168.1.10 步骤: 安装docker-machine 创建ssh密钥对,实现两主机无密登录 创建docker主机,命名host1 变更docker环境变量 运行容器查看两端是否同步 镜像容器同步测试成功
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
https://blog.csdn.net/wanglei_storage/article/details/77508620 实践中会发现,生产环境中使用单个 Docker 节点是远远不够的,搭建 Docker 集群势在必行。然而,面对 Kubernetes, Mesos 以及 Swarm 等众多容
1.引言 紧接上篇.NET Core容器化@Docker,这一节我们先来介绍如何使用Nginx来完成.NET Core应用的反向代理,然后再介绍多容器应用的部署问题。 2. Why Need Nginx .NET Core中默认的Web Server为Kestrel。 Kestrel is grea
docker rm `docker ps -a | grep Exited | awk &#39;{print $1}&#39;` 删除异常停止的docker容器 docker rmi -f `docker images | grep &#39;&lt;none&gt;&#39; | awk &#3
什么是Docker Compose 在微服务盛行的今天,我们通常是这么定义Compose的:对容器的统一启动和关闭的编排工具。 但是我以前还是有个疑惑,谁会用Compose在一台服务器上部署多个服务呢?干脆直接用单体服务就行了!直到我遇到了以下的一个需求,让我明白了在一台服务器上不得不用多个服务的时
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客之一Docker-Compose CentOS下Docker与.netcore(四)之 三剑客之一D
很多时候,我们在本地开发过程中程序运行很正常,但是发布到线上之后由于环境的原因,可能会有一些异常。通常我们会通过日志来分析问题,除了日志还有一种常用的调试手段就是:附加进程。 VS中的附加进程非常强大,目前提供了9种常用的附加方式。 在当前.Net Core支持跨平台的大背景下,其中Linux环境和
https://www.cnblogs.com/bigberg/p/8867326.html 一、简介 Docker有个编排工具docker-compose,可以将组成某个应该的多个docker容器编排在一起,同时管理。同样在Swarm集群中,可以使用docker stack 将一组相关联的服务进行
.Net6中想实现对某个网址截屏,可通过Selenium模拟访问网址并实现截图。 实现 安装Nuget包 &lt;PackageReference Include=&quot;Selenium.Chrome.WebDriver&quot; Version=&quot;85.0.0&quot; /&g
原文&#160;https://www.cnblogs.com/gispathfinder/p/5871043.html 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: host模式,使用--net=host指定。 co