TNBLOG
首页
博客
视频
资源
问答
猿趣
手机
关于
搜索
收藏
便签
笔记
消息
创作
登录
剑轩
斯人若彩虹
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
CSS
21篇
微服务
37篇
Git
13篇
.NET
95篇
移动开发
30篇
软件架构
17篇
.NET Core
106篇
.NET MVC
11篇
英语
3篇
随笔
95篇
Bootstrap
3篇
Redis
22篇
编辑器
10篇
Js相关
15篇
虚拟化
5篇
更多
Oracle
7篇
Python
7篇
数据库
25篇
EF
16篇
微信
3篇
前端
80篇
消息队列
7篇
docker
22篇
多线程
1篇
Java
4篇
软件基础
2篇
C++
2篇
WCF
7篇
Linux
5篇
nginx
3篇
K8S
6篇
ABP
2篇
最新文章
k8s加入集群一直卡到Running pre-flight checks
.net core swagger 添加header参数。swagger传递jwt token
virtualbox虚拟机centos7设置固定IP,并保证主机宿主机通信与虚拟机访问外网
k8s部署应用常见错误
部署应用到k8s集群
裸机搭建k8s集群
裸机搭建k8s集群可能遇到的坑
abp vnext连接mysql。.net core连接mysql
领域驱动设计DDD ABP Vext 三:领域模型 之 失血模型,贫血模型,充血模型,胀血模型
领域驱动设计DDD ABP Vext 二:使用仓储
python基础,列表,元组,高级特性(切片,迭代,列式推导)
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2022
TNBLOG.NET
技术交流:
群号677373950
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
裸机搭建k8s集群
276
人阅读
2022/5/30 15:20
总访问:
1638532
评论:
0
收藏:
0
手机
分类:
K8S
tn2>这里自己用虚拟机搭建的,可以整一个主节点,几个子节点。要保证虚拟机能访问外网,能获取自己的ip地址以及能相互ping通。怎么装虚拟机可以参考这篇文章,网络这些的设置里边也有提到。 https://www.tnblog.net/aojiancc2/article/details/6357 装虚拟机的时候保证每个节点包括主节点有两个cpu,和2g内存。不然装环境会有问题的。 ## 每个节点设置好主机名 ``` hostnamectl set-hostname master hostnamectl set-hostname node1 hostnamectl set-hostname node2 ``` 主节点设置成master,子节点设置成node1,node2...。设置好后可以输入hostname查询一下是否设置成功了。  ## 所有节点都修改 hosts tn2> 设置hosts是为了让主机名和ip地址做一个映射,能够使用主机名进行通讯。这里ip地址换成自己的电脑ip地址。我这里用vi编辑文件的,vim暂时没有装。 ``` vi /etc/hosts 192.168.1.102 master 192.168.2.108 node2 192.168.2.109 node1 ```  修改之后根据主机名拼一下,试试能不能拼通  ## 所有节点关闭 SELinux ``` # 所有节点关闭 SELinux setenforce 0 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux ``` ## 关闭所有节点的防火墙 ``` systemctl stop firewalld systemctl disable firewalld ``` 可以使用如下命令查看防火墙是否关闭 ``` systemctl status firewalld ``` ## 所有节点设置iptables ``` iptables -P FORWARD ACCEPT ``` ## 所有节点关闭 swap ``` swapoff -a ``` 防止开机自动挂载 swap 分区(将 /etc/fstab 中的内容注释掉) ``` sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab ``` ## 所有节点关闭 selinux 和 firewalld 将 selinux 由 enforcing 改为 disabled 。注意下面命令中 disabled 前面是数字 1,不是小写的英文字母 l ``` sed -ri 's#(SELINUX=).*#\1disabled#' /etc/selinux/config ``` 临时关闭 enforce ``` setenforce 0 ``` 验证 enforce 是否已关闭:如关闭,应返回结果:Permissive ``` getenforce ``` ## 时间同步可能会执行一下 我这里是默认就同步了的,所以不执行也可以的。 tn2>如果要设置的话,所有主机均需要操作。最小化安装系统需要安装ntpdate软件。同步的是阿里云的时间。 ``` # crontab -l 0 */1 * * * /usr/sbin/ntpdate time1.aliyun.com ``` ## 所有节点修改内核参数(配置网桥过滤及内核转发) 第一种方法(推荐!写到独立内核文件中): ``` cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.max_map_count = 262144 vm.swappiness=0 EOF ``` 第二种方法(写到默认内核文件中:/etc/sysctl.conf) ``` cat >> /etc/sysctl.conf <<eof net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 vm.max_map_count = 262144 vm.swappiness=0 eof ``` 第三种方法(写到默认内核文件中:/etc/sysctl.conf): ``` sudo sysctl -w net.bridge.bridge-nf-call-ip6tables=0 sudo sysctl -w net.bridge.bridge-nf-call-iptables = 1 sudo sysctl -w net.ipv4.ip_forward = 1 sudo sysctl -w vm.max_map_count = 262144 sudo sysctl -w vm.swappiness=0 ``` **参数说明:** - net.bridge.bridge-nf-call-ip6tables 和 net.bridge.bridge-nf-call-iptables,netfilter实际上既可以在L2层过滤,也可以在L3层过滤的。当值为 0 ,即要求iptables不对bridge的数据进行处理。当值为 1,也就意味着二层的网桥在转发包时也会被iptables的FORWARD规则所过滤,这样就会出现L3层的iptables rules去过滤L2的帧的问题。 - max_map_count,文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量。如不设置可能会报错:“max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]” - net.ipv4.ip_forward,出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将数据包发往本机另一块网卡,该网卡根据路由表继续发送数据包。这通常是路由器所要实现的功能。要让Linux系统具有路由转发功能,需要配置 Linux 的内核参数 - net.ipv4.ip_forward = 1。如果你不设置这个,你部署的web服务可能会在外部访问不到。 - swappiness,等于 0 的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。 **然后所有节点执行如下命令加载内核使修改生效** ``` modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf ``` ## 所有节点添加安装源 ``` # 添加 k8s 安装源 cat <<EOF > 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 mv kubernetes.repo /etc/yum.repos.d/ # 添加 Docker 安装源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ``` tn>如果执行yum-config-manager报错:yum-config-manager: 未找到命令。 这个是因为系统默认没有安装这个命令,这个命令在yum-utils 包里,可以通过命令yum -y install yum-utils 安装就可以了。 #### 然而你执行yum -y install yum-utils,可能还会遇到错 repomd.xml signature could not be verified for kubernetes **是因为repo 的 gpg 验证不通过导致的,可以修改repo_gpgcheck=0跳过验证。** 在linux下,repo文件都是存放在/etc/yum.repos.d文件夹之中的 进入/etc/yum.repos.d,找到kubernetes.repo,文件打开修改即可  修改repo_gpgcheck=0跳过验证。  修改之后在执行yum -y install yum-utils就可以成功了  ## 所有节点安装所需组件 tn2>版本更新太频繁了,刚开始用最新版本的时候坑要多点,所以可以固定一个版本,可以少点不同版本的坑。 比如我这里装的kubelet的1.16.2,和docker的18.06.3。要注意k8s和docker的版本对应。不然也可能会遇到问题的 ``` yum install -y kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2 docker-ce-18.06.3.ce-3.el7 ``` 如果你想装最新版本,那么不接版本号就可以了 ``` yum install -y kubelet kubeadm kubectl docker-ce ``` 安装成功之后可以使用docker --version,和kubelet --version查看版本号  ## 所有节点启动 kubelet、docker,并设置开机启动 ``` systemctl enable kubelet systemctl start kubelet systemctl enable docker systemctl start docker ``` ## 所有节点修改 docker 配置 主要是修改docker的cgroupdrive为systemd。不然和k8s的cgroupdrive不一致,会出现问题的。 ``` # kubernetes 官方推荐 docker 等使用 systemd 作为 cgroupdriver,否则 kubelet 启动不了 cat <<EOF > daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://ud6340vz.mirror.aliyuncs.com"] } EOF mv daemon.json /etc/docker/ ``` 修改之后,重启生效 ``` # 重启生效 systemctl daemon-reload systemctl restart docker ``` ## 用 kubeadm 初始化集群(仅在主节点跑) ``` # 初始化集群控制台 Control plane # 失败了可以用 kubeadm reset 重置 kubeadm init --image-repository=registry.aliyuncs.com/google_containers ``` 执行成功如下:  把最下面的kubeadm命令复制一下,后边集群中的子节点要通过这个名字加入 #### 复制授权文件,以便 kubectl 可以有权限访问集群 ``` # 如果你其他节点需要访问集群,需要从主节点复制这个文件过去其他节点 mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # 在其他机器上创建 ~/.kube/config 文件也能通过 kubectl 访问到集群 ``` ## 把工作节点(slave)加入到集群中(在所有 slave 执行) 就执行刚刚复制的命令,类似:kubeadm join 192.168.2.102:6443 --token xxx --discovery-token-ca-cert-hash xxx ###注意格式: 复制出来是这种带换行的格式  需要处理成一行的格式在执行:  **运行成功效果如下:**  ## 在主节点查看集群 **使用kubectl get nodes查看集群情况:**  其他节点有安装 kubectl 也可以查看 目前节点都是NotReady状态,因为这个 Master 节点的网络尚未就绪。  ## 安装网络插件,否则 node 是 NotReady 状态(主节点跑) ``` kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` tn6>注意由于这是外国的网址很有可能会访问不到遇到错误:kube-flannel.yml The connection to the server raw.githubusercontent.com was refused。 是因为域名解析不了,所以访问不了。  ### 解决方法: 不用域名登录,直接用ip登录,或者去/etc/hosts里设置下域名解析 **1、通过第三方网站查询到raw.githubusercontent.com所对应的ip是多少** http://ip.tool.chinaz.com/raw.githubusercontent.com  **2、修改/etc/hosts做好域名解析,ip最好用网站上查询到的最新的** 使用vi命令打开hosts文件: ``` vi /etc/hosts ``` 添加:185.199.109.133 raw.githubusercontent.com  **3、再次执行上面贴的命令就可以成功了**  ### 再次查看节点状态就已经正常了!  ### 解决方法2 把地址换一下,换成可以访问的地址。 ``` kubectl apply -f https://www.tnblog.net/k8s/kube-flannel.yml ``` **如果访问不到了,可以自己把`kube-flannel.yml`下载下来,然后在执行:** 链接: https://pan.baidu.com/s/1lotIWPVZYjmav89-wjbe_A?pwd=pqeb 提取码: pqeb 复制这段内容后打开百度网盘手机App,操作更方便哦 tn2> 视频教程地址:空了录一套视频地址放到tnblog
欢迎加群讨论技术,群号:677373950
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}