Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Kubernetes 环境搭建 - CentOS

Kubernetes 环境搭建 - CentOS

作者头像
轻量级云原生架构实验室
发布于 2018-08-02 03:21:10
发布于 2018-08-02 03:21:10
68400
代码可运行
举报
文章被收录于专栏:轻量级微服务轻量级微服务
运行总次数:0
代码可运行

环境

三台 CentOS 7.4 服务器kube1kube2kube3 ,配置:2 核 16G

关闭、禁用防火墙

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl stop firewalld

systemctl disable firewalld

禁用SELINUX:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
setenforce 0

创建 /etc/sysctl.d/k8s.conf 文件,添加如下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1

执行如下命令使修改生效:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
modprobe br_netfilter

sysctl -p /etc/sysctl.d/k8s.conf

安装 Docker

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce

# Step 4: 开启Docker服务
sudo service docker start

# Step 5: 设置开机启动
sudo systemctl enable docker

配置阿里云镜像加速器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://obww7jh1.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload

systemctl restart docker

Pull 必须的镜像 ( Master 节点 kube1 )

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export image=pause-amd64:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/anoy/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/anoy/${image}

export image=kube-apiserver-amd64:v1.10.4
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=kube-scheduler-amd64:v1.10.4
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=kube-controller-manager-amd64:v1.10.4
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=kube-proxy-amd64:v1.10.4
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=k8s-dns-kube-dns-amd64:1.14.8
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=k8s-dns-dnsmasq-nanny-amd64:1.14.8
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=k8s-dns-sidecar-amd64:1.14.8
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

export image=etcd-amd64:3.1.12
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

Node 节点 kube2 / kube3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export image=pause-amd64:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/anoy/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/anoy/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/anoy/${image}

export image=kube-proxy-amd64:v1.10.4
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/${image}
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/${image} k8s.gcr.io/${image}
docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/${image}

安装 kubelet kubeadm kubectl

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

yum install -y kubelet kubeadm kubectl

systemctl enable kubelet && systemctl start kubelet

配置 kubelet

安装完成后,我们还需要对 kubelet 进行配置,因为用 yum 源的方式安装的 kubelet 生成的配置文件将参数 --cgroup-driver 改成了 systemd,而 dockercgroup-drivercgroupfs,这二者必须一致才行,我们可以通过 docker info 命令查看:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ docker info | grep Cgroup
Cgroup Driver: cgroupfs

修改文件 kubelet 的配置文件 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ,将其中的 KUBELET_CGROUP_ARGS 参数更改成 cgroupfs

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Environment="KUBELET_CGROUP_ARGS=--cgroup-driver=cgroupfs"

另外还有一个问题是关于交换分区的,Kubernetes 从 1.8 开始要求关闭系统的 Swap ,如果不关闭,默认配置的 kubelet 将无法启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
swapoff -a

修改完成后,重新加载我们的配置文件即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
systemctl daemon-reload

构建 Kubernetes 集群

1、初始化 Master 节点 kube1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.17.58.201 --kubernetes-version=v1.10.4
  • --pod-network-cidr :后续安装 flannel 的前提条件,且值为 10.244.0.0/16参考资料
  • --apiserver-advertise-address :Master 节点的 IP 地址

输出日志:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.....
[addons] Applied essential addon: kube-dns
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 172.17.58.201:6443 --token 831rfg.dw0vyb1h3beab5as --discovery-token-ca-cert-hash sha256:623681fde5b2bf564a8631942f31797f9bef75f40b14a86ef75e1d31b43709f1

从日志中,可以看出,要使用集群,需要执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

还需要部署一个 Pod Network 到集群中,此处选择 flannel

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/v0.10.0/Documentation/kube-flannel.yml

至此,Master 节点初始化完毕,查看集群相关信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看集群信息
$ kubectl cluster-info
Kubernetes master is running at https://172.17.58.201:6443
KubeDNS is running at https://172.17.58.201:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看节点信息
$ kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
lab-backend1   Ready     master    1m        v1.10.4
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看 Pods 信息
$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                   READY     STATUS    RESTARTS   AGE
kube-system   etcd-lab-backend1                      1/1       Running   0          2m
kube-system   kube-apiserver-lab-backend1            1/1       Running   0          1m
kube-system   kube-controller-manager-lab-backend1   1/1       Running   0          2m
kube-system   kube-dns-86f4d74b45-zbnz6              3/3       Running   0          3m
kube-system   kube-flannel-ds-n67zn                  1/1       Running   0          1m
kube-system   kube-proxy-qdmqq                       1/1       Running   0          3m
kube-system   kube-scheduler-lab-backend1            1/1       Running   0          2m

如果初始化过程出现问题,使用如下命令重置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm reset

rm -rf /var/lib/cni/

rm -f $HOME/.kube/config

2、添加 Worker 节点

方式 ① 使用 kubeadm init 时返回的信息加入集群 kube2 / kube3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm join 172.17.58.201:6443 --token 831rfg.dw0vyb1h3beab5as --discovery-token-ca-cert-hash sha256:623681fde5b2bf564a8631942f31797f9bef75f40b14a86ef75e1d31b43709f1

方式 ② 重新生成 token kube1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm token generate

kubeadm token create <generated-token> --print-join-command --ttl=24h

  • --ttl=24h 代表这个Token 的有效期为 24 小时,初始化默认生成的 token 有效期也为 24 小时

加入集群 kube2 / kube3

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubeadm join 172.17.58.201:6443 --token 41ts3r.n2vw06xbniouo6u5 --discovery-token-ca-cert-hash sha256:f958e234e8554c2352127f356a7eb7dad422c10df9a749156df36e5972cba38b

再次查看集群节点 kube1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ kubectl get nodes
NAME           STATUS    ROLES     AGE       VERSION
lab-backend1   Ready     master    6m        v1.10.4
lab-backend2   Ready     <none>    56s       v1.10.3
lab-backend3   Ready     <none>    14s       v1.10.3

至此,1 Master + 2 Worker 的 kubernetes 集群就创建成功了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.06.10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
国内环境Kubernetes v1.12.1的安装与配置
版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢
耕耘实录
2018/12/20
1.6K0
Kubernetes 集群搭建
上一篇文章,我们介绍和对比了 Docker Swarm 和 Kubernetes:
用户3147702
2022/06/27
1.6K0
Kubernetes 集群搭建
10分钟搭建Kubernetes容器集群平台(kubeadm)
Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。
星哥玩云
2022/07/28
4240
10分钟搭建Kubernetes容器集群平台(kubeadm)
「走进k8s」kubeadm搭建 Kubernetes1.15.1集群环境(14)
安装花了2天时间,总结了各种坑,就是为了让大家在学习k8s的时候不在从入门到放弃。
IT架构圈
2019/08/15
2.2K0
Kubernetes集群搭建超详细总结(CentOS版)
学习Kubernetes的关键一步就是要学会搭建一套k8s集群。在今天的文章中作者将最近新总结的搭建技巧,无偿分享给大家!废话不多说,直接上干货!
用户5927304
2021/06/29
2.4K3
如何部署一个Kubernetes集群
在上一篇文章《Kubernetes和Docker的关系是什么?》和大家分享了关于Kubernetes的基本系统架构以及关于容器编排相关的概念,并总体阐述Kubernetes与Docker之间的基本关系。而要学习Kubernetes容器编排技术,首先要解决的就是学习环境问题,而由于Kubernetes本身具有一定的复杂性,且需要较大的系统资源环境,所以对于刚入门的读者来说如何快速部署一套Kubernetes学习环境就成了一件棘手的事情。
用户5927304
2020/08/27
9340
如何部署一个Kubernetes集群
kubeadm部署kubernetes集群
(3) 生成Kube Config文件,kubelet需要用这个文件与Master通信。
星哥玩云
2022/07/28
3600
K8s 安装
如果你的节点上面有科学上网的工具,可以忽略这一步,我们需要提前将所需的gcr.io上面的镜像下载到节点上面,当然前提条件是你已经成功安装了docker。
分母为零
2019/07/04
1.8K0
K8s 安装
全国内环境安装
前期实验性的代码: k8s安装命令(前期测试性) #cat /sys/class/dmi/id/product_uuid lsmod | grep br_netfilter modprobe br_netfilter #smod | grep br_netfilter cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.brid
waki
2021/12/08
5480
Kubernetes集群部署中安装Pods网络插件一直显示Pending状态解决
完成后可以重启一下docker和kubelet,正常情况就都会running了。
非著名运维
2022/06/22
1.4K0
如何成功启动 Docker 自带的 Kubernetes?(2020年更新)
大家好,相对之前的文档,因最新的 Docker Desktop 更新后,有些地方不再适用,现根据最新 stable 版本,重新撰写本文档。 毕竟我们使用 Google 的东西没那么容易,希望这篇技术笔记能帮大家节省一点点时间,知道坑在哪里,以便更好的玩转 Kubernetes。具体步骤的话,大概分以下几步:
一斤代码
2020/11/24
7.6K2
如何成功启动 Docker 自带的 Kubernetes?(2020年更新)
学习kubernetes,从快速搭建k8s集群开始
本系列文章,我们将在Ubuntu Server 18.04上搭建k8s环境进行入门学习。为了使用原生的Ubuntu Server 18.04,我们将使用multipass来创建多台Ubuntu Server 18.04虚拟环境。也就是说,如果你想完整参考本系列博客学习,你电脑上应当安装并能正常运行multipass,如果你想了解multipass基本操作,可以参考我写的另一篇博客:【使用Multipass管理Ubuntu虚拟机】。本文演示k8s集群搭建步骤,并不涉及k8s基础知识,你可能对文章的一些专业词语感到默生,但没有关系,我们在后面会循序渐进地介绍k8s知识。
极客开发者
2022/01/18
4980
手把手教你在CentOS上搭建Kubernetes集群
作者:ChamPly 安装CentOS 1.安装net-tools [root@localhost ~]# yum install -y net-tools 2.关闭firewalld [root@localhost ~]# systemctl stop firewalld && systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed
小小科
2018/05/04
1.9K1
n-Kubernetes配置解析与入坑解决FAQ记录
描述:在学习任何一门新技术总是免不了坑坑拌拌,当您学会了记录坑后然后将其记录当下次遇到,相同问题的时候可以第一时间进行处理;
全栈工程师修炼指南
2020/10/23
1.5K0
n-Kubernetes配置解析与入坑解决FAQ记录
kubernetes-1:使用kubeadm搭建K8S单master节点集群
现在官方推荐的是kubespray,但也是基于kubeadm;除此之外,还有kind,minikube,但是并不试用于部署生产级别集群。
千里行走
2019/07/03
2.2K0
k8s实践(十一):heapster+influxdb+grafana实现kubernetes集群监控
Heapster是Kubernetes原生的集群监控方案,Kubelet自身就包含了一个名为cAdvisor的agent,它会收集整个节点和节点上运行的所有单独容器的资源消耗情况。Heapster以pod的方式运行在某个节点上,它通过普通的KubernetesService暴露服务,使外部可以通过一个稳定的IP地址访问。它从集群中所有的cAdvisor收集数据,然后通过一个单独的地址暴露。
loong576
2019/11/08
1.2K0
k8s实践(十一):heapster+influxdb+grafana实现kubernetes集群监控
k8s实践(十一):heapster+influxdb+grafana实现kubernetes集群监
k8s集群部署详见:Centos7.6部署k8s(v1.14.2)集群 k8s学习资料详见:基本概念、kubectl命令和资料分享 k8s高可用集群部署详见:Centos7.6部署k8s v1.16.4高可用集群(主备模式) k8s集群高可用部署详见:lvs+keepalived部署k8s v1.16.4高可用集群
loong576
2021/05/13
1.2K0
k8s实践(十一):heapster+influxdb+grafana实现kubernetes集群监
kubeadm安装kubernetes V1.11.1 集群
如果想要用二进制方法安装最新版本的Docker,可以参考我之前的文章在Redhat 7.3中采用离线方式安装Docker
大江小浪
2018/07/25
1.5K0
kubeadm安装kubernetes V1.11.1 集群
n-Kubernetes入坑解决FAQ记录
描述:在学习任何一门新技术总是免不了坑坑拌拌,当您学会了记录坑后然后将其记录当下次遇到,相同问题的时候可以第一时间进行处理;
全栈工程师修炼指南
2022/09/29
5.8K0
n-Kubernetes入坑解决FAQ记录
kubeadm 查看创建集群需要的镜像版本,附拉取镜像脚本
查看创建集群需要的镜像版本 kubeadm config images list [--kubernetes-version <version>] 国内拉取镜像脚本 一般而言,直接使用kubeadm拉取指定仓库地址是可以的 kubeadm config images pull --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.18.3 下面这种是我没找到自动拉取时写的,下列脚本与以上不同的
互联网-小阿宇
2022/11/21
9010
kubeadm 查看创建集群需要的镜像版本,附拉取镜像脚本
推荐阅读
相关推荐
国内环境Kubernetes v1.12.1的安装与配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验