文章目录

  • 前言
  • 准备工作
  • 安装步骤
    • 设置主机名
    • 配置系统环境
    • 添加 hosts(主)
    • Docker安装
    • K8s组件安装
    • 集群初始化(主)
    • 工作节点加入集群(工)
    • 安装容器网络插件(主)
  • 测试
    • 等待集群Ready状态
    • 以Nginx为例作测试(主)
  • Rancher安装
  • 参考链接

前言

本文讲述在Linux内网搭建K8s集群详细步骤,解决搭建过程中的问题。

脚本基本可以不修改直接使用。

准备工作

需要Linux CentOS 7.x 两台及以上,本文用的 7.6。

主机要求有2个核心及以上。

安装步骤多个节点可以并行操作,默认所有操作各节点都要执行,某些操作仅主/工作节点执行在标题中有标注(主/工)。

部署成功后可以尝试使用 Kubesphere 或 Rancher 容器管理平台进行管理。

安装步骤

设置主机名

单独为每个服务器设置主机名,格式为hostnamectl set-hostname hostname。一般主节点取名master,从节点取名node.

echo "设置主节点主机名" > /dev/null
hostnamectl set-hostname k8s-master
echo "设置从节点主机名" > /dev/null
hostnamectl set-hostname k8s-node1

配置系统环境

echo "停止、关闭防火墙" > /dev/null
systemctl stop firewalld
systemctl disable firewalldecho "永久关闭SELinux" > /dev/null
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
echo  "临时关闭SELinux" > /dev/null
setenforce 0
echo "查看SELinux状态,显示为[SELinux status:                 disabled]视为设置成功" > /dev/null
sestatusecho "永久关闭Swap" > /dev/null
sed -ri 's/.*swap.*/#&/' /etc/fstab
echo "临时关闭Swap" > /dev/null
swapoff -aecho "安装、配置时间同步" > /dev/null
yum install ntpdate -y
ntpdate time.windows.comecho "创建/etc/sysctl.d/k8s.conf配置文件,将桥接的 IPv4 流量传递到 iptables 的链" > /dev/null
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

添加 hosts(主)

在主节点配置所有k8s服务器的host,并且host名字跟各服务器的主机名对应。这里配置的是公网IP。

# 追加host
cat >> /etc/hosts << EOF
<主节点IP> k8s-master
<工作节点IP> k8s-node1
EOFecho "使host配置生效" > /dev/null
/etc/init.d/network restart

Docker安装

echo "下载安装" > /dev/null
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7echo "设置开机启动并启动" > /dev/null
systemctl enable docker && systemctl start docker
echo "查看Docker版本" > /dev/null
docker --version

设置Docker仓库地址,这个地址是Docker镜像上传/下载源。这个地址可以是自己搭建的私有仓库Harbor,也可以考虑用阿里云等第三方仓库。

echo "创建/etc/docker/daemon.json配置文件并指定镜像仓库" > /dev/null
cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOFecho "重启Docker使配置生效" > /dev/null
systemctl restart docker

K8s组件安装

添加yum源,并配置为阿里云源,国内下载更快。

echo "创建/etc/yum.repos.d/kubernetes.repo追加yum源配置" > /dev/null
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
EOFecho "安装Kubeadm、Kubelet、Kubectl" > /dev/null
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
echo "设置开机启动" > /dev/null
systemctl enable kubelet

集群初始化(主)

通过kubeadm执行初始化,apiserver-advertise-address填主节点的IP。service-cidr是service网段。pod-network-cidr是Pod网段。

kubeadm init \
--apiserver-advertise-address=<IP> \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.18.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

Kubectl设置。kubeadm初始化完成后,控制台会打印下面一模一样的指令,直接执行。

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

工作节点加入集群(工)

主节点通过kubeadm初始化成功后控制台会打印出join脚本,复制到从节点执行。

如果忘记了join脚本,可以在主节点执行以下命令重新生成。

kubeadm token create --print-join-command

安装容器网络插件(主)

容器网络插件CNI(Container Network Interface)这里使用的解决方案为Flannel。

需要插件的配置文件kube-flannel.yml,通过kubectl来应用配置,命令格式为kubectl apply -f加上本地路径或者链接。下面这个是我码云仓库里面的,可直接用。

kubectl apply -f https://gitee.com/www.freeclub.com/blog-images/raw/master/source/kube-flannel.yml

测试

等待集群Ready状态

查看集群节点,可以看到节点从NotReady到Ready的状态变更。等全部Ready再进行下一步测试。

kubectl get nodes

以Nginx为例作测试(主)

创建一个Service和Deployment。

echo "部署 nginx (deployment,pod)" > /dev/null
kubectl create deployment nginx --image=nginx
echo "暴露 nginx 端口给集群外部访问 (service)" > /dev/null
kubectl expose deployment nginx --port=80 --type=NodePort

执行下面指令可获取pod和service信息,可以看到NodePort类型的service在宿主机暴露了随机端口30879供集群外部访问。

访问链接如:http://IP:30879,IP为工作节点主机IP。

echo "获取 service deployment 和 pod 信息" > /dev/null
kubectl get svc,deployment,pod

删除测试的Nginx Service和Deployment

echo "删除nginx service" > /dev/null
kubectl delete service nginx
echo "删除nginx deployment" > /dev/null
kubectl delete deployment nginx

Rancher安装

Master 节点执行以下指令就行,官网有 快速开始 介绍。

Rancher 是一个容器管理平台,可以直接创建集群,也可以将原有集群添加进去交给它管理。通过UI界面创建集群中各个容器/组件非常方便。

安装好后通过 80/443 端口访问,云服务器记得开放这两个端口

sudo docker run --privileged -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher

参考链接

iptables IP 重定向

Rancher 官网

在Linux内网搭建K8s集群相关推荐

  1. Linux云计算虚拟化-使用rancher搭建k8s集群并发布电商网站

    文章目录 Linux云计算虚拟化-使用Rancher搭建k8s集群并使用lnmp架构发布电商网站 1. Rancher介绍 2. 使用Rancher搭建k8s集群 2.1 实验环境介绍 2.2 在ra ...

  2. 纯手工搭建k8s集群-(二)核心模块部署

    1. 部署ETCD(主节点) 1.1 简介 kubernetes需要存储很多东西,像它本身的节点信息,组件信息,还有通过kubernetes运行的pod,deployment,service等等.都需 ...

  3. 搭建k8s集群完整流程,云服务器、虚拟机均可参考

    一.机器准备 本次搭建k8s集群采用三台云服务器,master节点最好采用2核2G以上的机器,node节点不作要求 二.开始搭建 1.机器 | 角色     | IP           | | -- ...

  4. linux下离线安装k8s集群1.19.4附带nfs存储(kubeadm方式)

    linux下离线安装k8s集群1.19.4附带nfs存储 活动地址:毕业季·进击的技术er  一,环境简介 kubernetes-1.19.4集群部署计划 序号 服务器配置 IP地址 操作系统 备注 ...

  5. 搭建K8s集群(二进制方式)-搭建步骤介绍

    使用二进制方式搭建K8S集群 注意 [暂时没有使用二进制方式搭建K8S集群,因此本章节内容不完整... 欢迎小伙伴能补充~] 准备工作 在开始之前,部署Kubernetes集群机器需要满足以下几个条件 ...

  6. 【运维开发】Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群

    Mac OS(10.13.6)使用 vagrant+VirtualBox +centos7搭建k8s集群步骤 环境准备工作 下载VirtualBox 地址:https://www.virtualbox ...

  7. centos7中kubeadm方式搭建k8s集群(crio+calico)(k8s v1.21.0)

    文章目录 centos7中kubeadm方式搭建k8s集群(crio+calico)(k8s v1.21.0) 环境说明 注意事项及说明 1.版本兼容问题 2.镜像问题 安装步骤 安装要求 准备环境 ...

  8. 【云原生-K8s】kubeadm搭建k8s集群

    搭建K8s集群[无需科学上网] 官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kub ...

  9. 3.搭建K8s集群[无需ke学上网]

    01 搭建K8s集群[无需科学上网] 官网:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install- ...

最新文章

  1. VHDL简单微处理器的设计
  2. PAT_B_1039_Java(20分)
  3. 【QMIX】一种基于Value-Based多智能体算法
  4. Panorama Viewer – jQuery 360度全景展示插件
  5. CSS 中 的 margin、border、padding 区别 (内边距、外边距)
  6. plsql连接 oracle instantclient_11_2 本地机器不安装oracle_02
  7. Exchange 2013 邮箱管理
  8. 我的世界服务器物品解绑定,我的世界更方便控制VIP物品 灵魂绑定插件分享
  9. 前端有未来吗?听我娓娓道来!
  10. 批处理文件中获取当前所在路径的几种方法,以及写文件到txt
  11. 两端“弱智”的HTML代码
  12. 有哪些论文降重的方法?
  13. FeedingBottle 3.2另一个无线破解GUI
  14. BAT文件中如何注释
  15. 基于Java的电子会议预约管理系统
  16. 扩展卡尔曼滤波soc估算 基于EKF算法的锂电池SOC 卡尔曼滤波估计电池soc ,simulink模型
  17. 铂电阻测温电路c语言程序,pt100测温电路(经典测温范围)
  18. 普及1080i和1080p的区别
  19. PythonOperator、BashOperator以及Xcom使用
  20. 485型传感器之数据回传进行CRC校验

热门文章

  1. [js] js定时器的清除
  2. HashMap 21 问!
  3. 苹果计算机怎么输入分数,Mac Word怎么打分数
  4. 微信支付系列(二)之订单的创建
  5. CakePHP v3.9.3 Connection to database could not be established: SQLSTATE[HY000] [1045] Access
  6. 使用vue写一个转盘抽奖小游戏
  7. 权威认可,腾讯云TDSQL通过信通院数据库服务商运维运营服务能力评估
  8. PHP医院网络预约管理系统源码,医院咨询预约登记OA系统(可商用也可作毕业设计)
  9. 《精益创业》读后思考 2
  10. mysql trim_mysql trim函数用法实例