Liunx-Kubernetes安装

news2024/11/16 8:40:03

安装Kubernetes

Kubernetes有多种部署方式,目前主流的方式有kubeadm、minikube、二进制包

  • minikube:一个用于快速搭建单节点kubernetes的工具
  • kubeadm:一个用于快速搭建kubernetes集群的工具
  • 二进制包:从官网下载每个组件的二进制包,依次去安装,此方式理解Kubernetes组件最有效

一主多从

主机规划

本次环境搭建需要安装三台Centos服务器(一主多从),然后在每台服务器中分别安装docker(18.06.3)、kubeadm(1.17.4)、kubelet(1.17.4)、kubectl(1.17.4)程序

角色IP操作系统配置
Master192.168.10.100Centos7.52核 2G内存 50G硬盘
Node1192.168.10.101Centos7.52核 2G内存 50G硬盘
Node2192.168.10.102Centos7.52核 2G内存 50G硬盘

环境初始化

检查操作系统版本

确保操作系统版本在7.5或以上

cat /etc/redhat-release

在这里插入图片描述

主机名解析

修改/etc/hosts文件添加 master、node1、node2主机名与地址

vim /etc/hosts

在这里插入图片描述

测试是否能够相互通信

在这里插入图片描述

时间同步

Kubernetes要求集群中的节点时间必须精确一致,这里直接使用chronyd服务从网络同步时间,在企业中建议配置内部的时间同步服务器

#启动时间同步服务
systemctl start chronyd
#设置开机自启动
systemctl enable chronyd
#获取时间测试
date

在这里插入图片描述

禁用iptables和firewalld服务

Kubernetes和docker在运行中会产生大量的iptables规则,为了不让系统规则跟它混淆,直接关闭系统的规则

#关闭firewalld服务
systemctl stop firewalld
systemctl disable firewalld
#关闭iptables服务
systemctl stop iptables
systemctl disable iptables
禁用selinux

selinux是linux系统下的安全服务,如果不关闭它在安装集群时会有一些奇怪的问题

vim /etc/selinux/config

在这里插入图片描述

禁用swap分区

swap分区指的是虚拟内存,它的作用是在物理内存使用完后将磁盘空间虚拟成内存使用,启用swap设备会对系统性能产生负面影响,因此Kubernetes要求每个节点都要禁用swap设备

但是如果因为某些原因确实不能关闭swap分区,那么需要在集群安装过程中通过参数配置来说明

vim /etc/fstab

在这里插入图片描述

修改内核参数

根据官方要求在指定文件创建并且编辑kubernetes.conf文件

vim /etc/sysctl.d/kubernetes.conf
# kubernetes.conf中添加如下内容
# net.bridge.bridge-nf-call-ip6tables=1
# net.bridge.bridge-nf-call-iptables=1
# net.ipv4.ip_forwaed=1

#重新加载配置
sysctl -p

#加载网桥过滤模块
modprobe br_netfilter

#查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter

在这里插入图片描述

在这里插入图片描述

配置ipvs功能

在Kubernetes中service有两种代理模型,一种基于iptables,一种基于ipvs

ipvs性能比较高,如果需要使用它,需要手动载入ipvs模块

#安装ipset和ipvsadm
yum install ipset ipvsadm -y

#添加需要加载的模块写入脚本文件
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

#给脚本添加可执行权限,执行脚本文件,查看模块是否加载成功
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

在这里插入图片描述

重启
#重启系统
reboot

Docker安装

#切换到国内镜像
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

#安装18.06.3 Docker,使用--setopt命令确保不会安装到其它跟高的版本
yum -y install --setopt=obsoletes=0 docker-ce-18.06.3.ce-3.el7

#添加配置文件
#Docker在默认情况下使用Cgroup Driver为cgroupfs,而kubernetes推荐使用systemd
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "registry-mirrors": ["https://pztjnors.mirror.aliyuncs.com"]
}
EOF

#启动docker
systemctl restart docker
systemctl enable docker

#检查docker状态和版本
docker version

Kubernetes组件安装

#切换使用阿里云镜像源
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

#安装kubeadm、kubelet和kubectl
yum install --setopt=obsoletes=0 kubeadm-1.17.4-0 kubelet-1.17.4-0 kubectl-1.17.4-0 -y

# 配置kubelet和cgroup
vim /etc/sysconfig/kubelet
# 在配置文件中添加如下内容
# KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
# KUBE_PROXY_MODE="ipvs"

#设置kubelet开机自启
systemctl enable kubelet

准备集群镜像

#执行kubeadm命令,查看需要准备什么镜像
kubeadm config images list

#由于国内无法访问k8s镜像
#这里编写脚本通过访问阿里云,下载镜像
images=(
    kube-apiserver:v1.17.4
    kube-controller-manager:v1.17.4
    kube-scheduler:v1.17.4
    kube-proxy:v1.17.4
    pause:3.1
    etcd:3.4.3-0
    coredns:1.6.5
)

for imageName in ${images[@]} ; do
    docker pull registry.aliyuncs.com/google_containers/$imageName
    docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
    docker rmi registry.aliyuncs.com/google_containers/$imageName
done

集群初始化(Master)

初始化集群时只需要在master上执行即可

注意:--apiserver-advertise-address参数是你master的IP地址

#初始化集群(只需要Master上执行)
kubeadm init \
  --kubernetes-version v1.17.4 \
  --pod-network-cidr=10.244.0.0/16 \
  --service-cidr=10.96.0.0/12 \
  --apiserver-advertise-address=192.168.10.100 \
  
#添加配置
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

#假如失败需要重新安装,可以重置kubeadm
kubeadm reset

在这里插入图片描述

其它节点加入到集群(Node)

集群初始化成功后其它node就可以加入到集群中了,注意该命令每个人的主机都不一样具体什么命令看初始化成功后的提示

#node节点上执行该命令
kubeadm join 192.168.10.100:6443 --token zal1ue.tev416o3khxtm4tz \
    --discovery-token-ca-cert-hash sha256:c565d9b35108f933dbf8243955db1abdf866bb8c92eca7ee89bfaf58d2c171a1 

在这里插入图片描述

添加完毕后回到master就可以查看到集群的节点信息了

#查看集群节点信息
kubectl get nodes

在这里插入图片描述

安装网络插件(Master)

安装网络插件只需要在master上执行即可

Kubernetes支持多种网络插件,如fannel、calico、canal等,这里我使用的是flannel

#获取fannel的配置文件
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

#使用配置文件,-v=8调试模式启动
kubectl apply -f kube-flannel.yml -v=8

#查看集群状态
kubectl get nodes

在执行kube-flannel.yml后,会在master和node节点上通过docker下载flannel,由于docker下载比较慢会等很久,如果很久都还是NotReady状态,可以自行使用docker pull flannel/flannel:v0.21.5在各节点上下载

在这里插入图片描述

服务部署测试

到这里集群部署已经完成,接下来部署一个nginx测试集群是否能够正常工作

#部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine

#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort

#查看pod
kubectl get pod

#查看service
kubectl get service

在这里插入图片描述

通过kubectl get service查看到nginx通过访问31133就可以访问到nginx了

在这里插入图片描述

常见问题

重启K8s后通过http://masterIP地址:端口无法访问到服务

问题现象

  1. 在任何主机(包括集群node节点),使用curl http://masterIP地址:服务端口/命令都是访问超时
  2. 在Master节点上,使用kubectl get pods 命令查看pod状态是正常
  3. 在Master节点上,使用kubectl get svc 命令查看service状态是正常,并且端口开发
  4. 在Master节点上,使用kubectl describe pods | grep "^Name:" -A 3命令,找到改服务部署在那个节点上,登录到对应的Node服务器使用curl http://NodeIP地址:服务端口/能够正常访问
  5. 在Master节点上,使用curl http://masterIP地址:服务端口/能够正常访问

排查

猜测:通过以上现象分析很可能是kube-proxy发生了问题

验证猜测:执行如下命令curl 127.0.0.1:10249/proxyMode查看kube-proxy模式

在这里插入图片描述

验证猜测:执行如下命令kubectl get configmap kube-proxy -n kube-system -o yaml 查看kube-system配置

在这里插入图片描述

结论:通过以上2个验证,发现由于kube-system的mode未配置模式,导致kube-system使用了iptables模式

解决方案

修改kube-proxy的mode配置,改为ipvs即可

#修改kube-proxy配置
#找到mode属性修改为 => mode: "ipvs"
kubectl edit cm kube-proxy -n kube-system

#手动重启 kube-proxy 进程
kubectl rollout restart daemonset/kube-proxy -n kube-system

#等待片刻,查看kube-system模式
curl 127.0.0.1:10249/proxyMode

#测试,有正常返回内容表示成功
curl http://192.168.10.100:30456/

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浏览器多开,数据之间相互不干扰

方法很简单 在浏览器快捷方式中&#xff0c;快捷键点开属性&#xff0c;在目标中添加--user-data-dirD:\chrome\1

【蓝桥每日一题]-贪心(保姆级教程 篇1)#拼数 #合并果子 #凌乱yyy

目录 题目&#xff1a; 拼数 思路&#xff1a; 题目&#xff1a; 合并果子 思路&#xff1a; 题目&#xff1a;凌乱yyy 思路&#xff1a; 题目&#xff1a;拼数 思路&#xff1a; 思路很简单。举个例子&#xff1a;对于a321,b32。我们发现ab32132,ba32321&#xff0c;那么…

TypeScript学习 | 泛型

简介 泛型是指在定义函数、接口或类的时候&#xff0c;不预先指定具体的类型&#xff0c;而在使用的时候再指定类型的一种特性 作用 可以保证类型安全的前提下&#xff0c;让函数、接口或类与多种类型一起工作&#xff0c;从而实现复用 基本使用 举个例子&#xff1a; 创…

【TGRS 2023】RingMo: A Remote Sensing Foundation ModelWith Masked Image Modeling

RingMo: A Remote Sensing Foundation Model With Masked Image Modeling, TGRS 2023 论文&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9844015 代码&#xff1a;https://github.com/comeony/RingMo MindSpore/RingMo-Framework (gitee.com) …

解决:vscode和jupyter远程连接无法创建、删除文件的问题(permission denied)

目录 问题&#xff1a;vscode和jupyter远程连接服务器无法创建、删除文件的问题原因&#xff1a;代码文件的权限不够解决方法&#xff1a;1.ls -l查看目录所在组&#xff0c;权限2.chown修改拥有者和所在组 问题&#xff1a;vscode和jupyter远程连接服务器无法创建、删除文件的…

【兔子王赠书第3期】《案例学Python(进阶篇)》

文章目录 前言推荐图书本书特色本书目录本书样章本书读者对象粉丝福利丨评论免费赠书尾声 前言 随着人工智能和大数据的蓬勃发展&#xff0c;Python将会得到越来越多开发者的喜爱和应用。因为Python语法简单&#xff0c;学习速度快&#xff0c;大家可以用更短的时间掌握这门语…

Spring学习笔记—JDK动态代理

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Spring专栏 ✨特色专栏&#xff1a; M…

Unity中Shader的ShaderLOD

文章目录 前言一、ShaderLOD的使用步骤1、ShaderLOD使用在不同的SubShader中&#xff0c;用于区分SubShader所对应的配置2、在 C# 中使用 Shader.globalMaximumLOD 赋值来选择不同的 SubShader,以达到修改配置对应Shader的效果3、在设置LOD时&#xff0c;是需要和程序讨论统一 …

WebGL笔记:矩阵的变换之平移的实现

矩阵的变换 变换 变换有三种状态&#xff1a;平移、旋转、缩放。当我们变换一个图形时&#xff0c;实际上就是在移动这个图形的所有顶点。解释 webgl 要绘图的话&#xff0c;它是先定顶点的&#xff0c;就比如说我要画个三角形&#xff0c;那它会先把这三角形的三个顶点定出来…

为什么需要山洪灾害监测预警系统?

在山洪高发地区&#xff0c;安装山洪灾害监测预警系统能够通过实时监测&#xff0c;预警山洪信息&#xff0c;对于保障我们的生命财产安全具有重要意义。 监测山洪不仅需要对山体进行监测&#xff0c;还要监测降雨量以及水位上升情况。山洪灾害监测预警系统是由GNSS监测站和水…

linux安装node(含npm命令) 并配置淘宝镜像源

1. 下载压缩包 wget https://nodejs.org/dist/v16.14.0/node-v16.14.0-linux-x64.tar.xz # node14 https://nodejs.org/dist/v14.15.4/node-v14.15.4-linux-x64.tar.xz # 推荐将压缩包放置到/usr/local/node文件夹中安装 mv node-v16.14.0-linux-x64.tar.xz /usr/local/node …

LeetCode217——存在重复元素

LeetCode217——存在重复元素 1.题目描述&#xff1a; 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 2.Result01(暴力解) public static boolean containsDuplicate(in…

SRAM与DRAM的区别

目录 SRAM 特点 应用场景 DRAM 特点 应用场景 SRAM和DRAM的区别 SRAM SRAM&#xff08;静态随机存取存储器&#xff09;是一种用于存储和检索数据的类型的计算机内存。SRAM的存储单元通过触发器&#xff08;flip-flop&#xff09;实现&#xff0c;它们可以保持数据的状态…

语雀崩溃7个小时的原因是什么??

1 语雀是什么 语雀是蚂蚁集团旗下的在线文档编辑与协同工具&#xff0c;使用了“结构化知识库管理”&#xff0c;形式上类似书籍的目录。用户量在千万级别&#xff0c;是非常强大的。身边有不少朋友是付费会员&#xff0c;有许多公司也付费在使用语雀作为知识库进行文档的存储…

通过社工进网站后台的渗透测试

目录 通过社工进网站后台 0X0 开始&#xff1a; 0X1 获取icp备案企业&#xff1a; 0X2 通过备案获取姓名&#xff1a; 0X3 通过姓名获取手机号&#xff1a; 0X4 弱口令进后台&#xff1a; 0X5 总结 通过社工进网站后台 记录一次通过简单社工获取信息后进入后台的经过。…

近似熵的计算

我们计算两个函数,一个是henon,另外一个是TriMap: 代码: 构造henon函数: function [x,y]=Henon(x0,y0,a,b,M) M=M+10000; x = zeros(1,M+1); y = zeros(1,M+1); x(1)=x0; y(1)=y0; for i = 1:Mx(i+1) = 1+y(i)-a*x(i)^2;y(i+1) = b*x(i); endx=x(10001:M); y=y(10001:M)…

【人工智能Ⅰ】实验1:谓词表示法与产生式知识表示

实验1 谓词表示法与产生式知识表示 一、实验目的 1、熟悉谓词逻辑表示法&#xff1b; 2、理解和掌握产生式知识表示方法&#xff0c;实现产生式系统的规则库。 二、实验内容 要求通过C/C/python语言编程实现&#xff1a; 1、猴子摘香蕉问题 2、动物识别系统 &#xff08…

C# 基于腾讯云人脸核身和百度云证件识别技术相结合的 API 实现

目录 腾讯云人脸核身技术 Craneoffice.net 采用的识别方式 1、活体人脸核身(权威库)&#xff1a; 2、活体人脸比对&#xff1a; 3、照片人脸核身(权威库)&#xff1a; 调用成本 百度云身份证识别 调用成本 相关结合点 核心代码 实现调用人脸核身API的示例 实现调用身…

css 三栏布局的实现?

目录 前言 用法 代码 理解 高质量图片 1. 左侧栏 - 导航菜单 2. 中间栏 - 主要内容 3. 右侧栏 - 小部件和广告 布局的响应式设计 三栏布局在前端页面设计中是一个常见的布局方式&#xff0c;通常包含左侧、中间和右侧三个部分。这种布局方式在多种场景中都很受欢迎&am…

企业安全—DevSecOps概述详情

0x00 前言 SDL存在的问题在于体量过于庞大&#xff0c;不利于快速进行适配和进行&#xff0c;所以就有了DevSecOps&#xff0c;实际上是因为敏捷开发也就是DevOps的推进&#xff0c;并且坐上了云服务模式的火车&#xff0c;所以这一系列的东西都开始普及。DevSecOps作为DevOps…