首页 > 系统相关 >在Linux内网搭建K8s集群

在Linux内网搭建K8s集群

时间:2023-04-05 18:47:54浏览次数:87  
标签:K8s -- dev echo etc Linux null 内网 节点

前言

本文讲述在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 firewalld

echo "永久关闭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
sestatus

echo "永久关闭Swap" > /dev/null
sed -ri 's/.*swap.*/#&/' /etc/fstab
echo "临时关闭Swap" > /dev/null
swapoff -a

echo "安装、配置时间同步" > /dev/null
yum install ntpdate -y
ntpdate time.windows.com

echo "创建/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
EOF

echo "使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.el7

echo "设置开机启动并启动" > /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"] 
}
EOF

echo "重启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
EOF

echo "安装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脚本,复制到从节点执行。

image-20210925174037096

如果忘记了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

image-20210925223336700

以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

image-20210925214116399

删除测试的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 官网

标签:K8s,--,dev,echo,etc,Linux,null,内网,节点
From: https://www.cnblogs.com/shuiyao3/p/17290271.html

相关文章

  • 在Linux配置LVS实现负载均衡
    前言这篇主要是讲LVS配置来实现负载均衡,步骤非常简单,只不过为了解释配置的目的增加了一些文字解释,而显得内容很多。LVS(LinuxVirtualServer)是章文嵩博士成立的自由软件项目。Linux将其作为内核的一部分,命名为IPVS(IPVirtualServer)。配置简介在一台作为负载均衡服务器DS(Direc......
  • 在Linux搭建Zookeeper集群
    前言本文讲述在多台Linux服务器搭建ZooKeeper集群的具体步骤,共4个节点(1主2从1观察者)。ZooKeeper使用的端口:【2181】对client提供服务;【3888】选举leader;【2888】集群内通讯。准备工作ZooKeeper需要1.7及以上版本的JDK,可以参考在Linux安装JDK。给系统配置hosts......
  • mysql linux 主从配置
    mysql安装https://www.cnblogs.com/kire-cat/p/16361559.html 主从配置https://blog.csdn.net/D1179869625/article/details/120773725......
  • 在Linux部署RocketMQ可视控制台Dashboard
    前言Dashboard是一个Javaweb项目,Maven工程。通过源码编译成jar包后启动即可通过浏览器访问。通过html界面可以查看RockeMQ集群状态、创建/删除Topic、生产/消费等。安装echo"从GitHub下载源码包">/dev/nullwget-P~/soft/rocketmqhttps://github.com/apache/rocketmq......
  • 在Linux搭建Kafka集群
    前言以kafka_2.13-2.8.0版本做示例,安装架构图如下所示,4台服务器,4个节点的Zookeeper集群(1主2从1观察)以及3个Kafka服务。准备工作准备多台服务器来搭建集群环境Kafka需要Zookeeper做分布式协调,所以得先准备好Zookeeper集群。可以参考在Linux搭建Zookeeper集群给系统配置host......
  • 在Linux部署Redis主从和哨兵集群实现高可用
    前言本文主要讲述在Linux系统中配置和部署Redis主从集群和哨兵,实现高可用和自动故障迁移。准备工作参考Redis单机部署安装3个Redis服务作一主二从,本文准备了6380(主)、6381(从)和6382(从)。参考Redis单机部署安装3个Redis服务作哨兵集群,本文准备了26380......
  • 在Linux部署Redis Cluster集群
    前言本文讲述在Linux系统部署RedisCluster实现数据分片的具体步骤。请参考Redis单机部署下载编译。RedisCluster是什么?RedisCluster是官方提供的一种用数据分片来实现横向扩容的解决方案,由一个或多个Redis服务组成一个无主集群。对Key使用哈希算法将数据分散......
  • 在Linux部署Redis代理Predixy实现数据分片
    前言本文以predixy-1.0.5为例,讲述Redis代理Predixy安装过程。Predixy是一款高性能全特征Redis代理,支持Redis-sentinel和Redis-cluster。作者拿其它常用代理做了性能测评,Predixy在各个维度性能都是最优的,与其他代理的功能对比。我们可以通过取模、随机、一致性哈希......
  • 【Linux】性能调优命令
    进程性能pidstatcat/proc/5598(PID)/statusfreepstoppstreepgrepvmstat#使用top命令,查找pid$top#通过TOP-H-p进程ID,找到具体的线程占用情况$top-H-p21564#通过命令pstack进程ID显示线程堆栈\$pstack24714Java相关参考文档:https://qinxuew......
  • 在Linux部署Redis代理Twemproxy实现数据分片
    前言本文主要讲述Redis代理Twemproxy安装过程。Twemproxy是推特开源用于Memcached和Redis的轻量级代理。这里以0.5.0版本为例。我们可以通过取模、随机、一致性哈希等算法将数据分散在多个Redis服务来实现水平扩展。但是客户端直连就需要跟每个Redis服务产生连接,......