Centos7 + kubenetes 一键安装实战

news2024/11/27 18:28:17

1. kubernetes部署环境要求

  • 一台或多台机器,操作系统CentOS7.x-86_x64
  • 硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+
  • 集群内各个机器之间能相互通信
  • 集群内各个机器可以访问外网,保证网络畅通(最好能访问谷歌),需要拉取镜像
  • 禁止swap分区
    • 输入命令swapoff -a,禁用swap分区;
    • 输入命令free -mh,再查看一下swap分区状态;
  • 常用工具 :yum install wget net‐tools vim bash‐comp* ‐y
  • 主机命名:  hostnamectl set‐hostname master
  • 设置解释: vi /etc/resolv.conf   设置  servername  114.114.114.114

2.1 安装步骤 

准备工作:本地虚拟机测试的时候, 关于设置双网卡静态 IP 的内容, 自行百度。

vi /etc/sysconfig/network-script/ifcfg-enp0s3

里面的 dhcp 改为 static

末尾 IPADDR=192.168.56.xx

重启网络: systemctl restart network

在主机中,新建脚本文件 install_k8s.sh:

vi install_k8s.sh

写入下面内容

#!/bin/bash
# Kubernetes部署环境要求:
#(1)一台或多台机器,操作系统CentOS 7.x-86_x64
#(2)硬件配置:内存2GB或2G+,CPU 2核或CPU 2核+;
#(3)集群内各个机器之间能相互通信;
#(4)集群内各个机器可以访问外网,需要拉取镜像;
#(5)禁止swap分区;

# 安装步骤
#1. 安装docker
#1.1 如果没有安装docker,则安装docker。会附带安装一个docker-compose
#
#2. 安装k8s
#2.1 初始化环境
#2.2 添加安装源
#2.3 安装kubelet、kubectl、kubeadmin
#2.4 安装master
#2.5 安装网络插件

set -e

# 安装日志
install_log=/var/log/install_k8s.log
tm=$(date +'%Y%m%d %T')

# 日志颜色
COLOR_G="\x1b[0;32m"  # green
RESET="\x1b[0m"

function info(){
    echo -e "${COLOR_G}[$tm] [Info] ${1}${RESET}"
}

function run_cmd(){
  sh -c "$1 | $(tee -a "$install_log")"
}

function run_function(){
  $1 | tee -a "$install_log"
}

function install_docker(){
  info "1.使用脚本自动安装docker..."
  curl -sSL https://get.daocloud.io/docker | sh

  info "2.启动 Docker CE..."
  sudo systemctl enable docker
  sudo systemctl start docker

  info "3.添加镜像加速器..."
  if [ ! -f "/etc/docker/daemon.json" ];then
    touch /etc/docker/daemon.json
  fi
  cat <<EOF > /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://registry.cn-hangzhou.aliyuncs.com"
    ]
}
EOF

  info "4.重新启动服务..."
  sudo systemctl daemon-reload
  sudo systemctl restart docker

  info "5.测试 Docker 是否安装正确..."
  docker run hello-world

  info "6.检测..."
  docker info

  read -p "是否安装docker-compose?默认为 no. Enter [yes/no]:" is_compose
  if [[ "$is_compose" == 'yes' ]];then
    info "7.安装docker-compose"
    sudo curl -L "https://github.com/docker/compose/releases/download/2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod a+x /usr/local/bin/docker-compose

    # 8.验证是否安装成功
    info "8.验证docker-compose是否安装成功..."
    docker-compose -v
  fi
}

function install_k8s() {
    info "初始化k8s部署环境..."
    init_env

    info "添加k8s安装源..."
    add_aliyun_repo

    info "安装kubelet kubeadmin kubectl..."
    install_kubelet_kubeadmin_kubectl

    info "安装kubernetes master..."
    yum -y install net-tools
    if [[ ! "$(ps aux | grep 'kubernetes' | grep -v 'grep')" ]];then
      kubeadmin_init
    else
      info "kubernetes master已经安装..."
    fi

    info "安装网络插件flannel..."
    install_flannel

    info "去污点..."
    kubectl taint nodes --all node-role.kubernetes.io/master-
}

# 初始化部署环境
function init_env() {
  info "关闭防火墙"
  systemctl stop firewalld
  systemctl disable firewalld

  info "关闭selinux"
  sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/g' /etc/selinux/config
  source /etc/selinux/config

  info "关闭swap(k8s禁止虚拟内存以提高性能)"
  swapoff -a
  sed -i '/swap/s/^\(.*\)$/#\1/g' /etc/fstab

  info "设置网桥参数"
  cat <<-EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  sysctl --system  #生效
  sysctl -w net.ipv4.ip_forward=1

  info "时间同步"
  yum install ntpdate -y
  ntpdate time.windows.com
}

# 添加aliyun安装源
function add_aliyun_repo() {
  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
}

function install_kubelet_kubeadmin_kubectl() {
  yum install kubelet-1.19.4 kubeadm-1.19.4 kubectl-1.19.4 -y
  systemctl enable kubelet.service

  info "确认kubelet kubeadmin kubectl是否安装成功"
  yum list installed | grep kubelet
  yum list installed | grep kubeadm
  yum list installed | grep kubectl
  kubelet --version
}

function kubeadmin_init() {
  sleep 1
  read -p "请输入master ip地址:" ip
  kubeadm init --apiserver-advertise-address="${ip}" --image-repository registry.aliyuncs.com/google_containers --kubernetes-version v1.19.4 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16
  mkdir -p "$HOME"/.kube
  sudo cp -i /etc/kubernetes/admin.conf "$HOME"/.kube/config
  sudo chown "$(id -u)":"$(id -g)" "$HOME"/.kube/config
}

function install_flannel() {
  yum -y install wget
  wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
  kubectl apply -f kube-flannel.yml
}

# 安装docker
read -p "是否安装docker?默认为:no. Enter [yes/no]:" is_docker
if [[ "$is_docker" == 'yes' ]];then
  run_function "install_docker"
fi

# 安装k8s
read -p "是否安装k8s?默认为:no. Enter [yes/no]:" is_k8s
if [[ "$is_k8s" == 'yes' ]];then
  run_function "install_k8s"
fi

  • 分配执行权限chmod +x install_k8s.sh
  • 执行脚本sh install_k8s.sh 安装步骤就是这么简单

2.2 安装过程说明

  • 第一步安装docker
  • 第二部安装docker-compose
  • 第三部安装k8s 安装会有交互过程,建议不要离开。交互如下:
  • 询问是否安装docker(如果已经安装过,可以选择no)

  • 询问是否安装docker-compose(非必须步骤,可以选择no,另外docker-compose经常由于网络问题安装失败)

  • 询问是否安装k8s

  • 填写k8s的master ip地址,其实就是当前安装机器的ip地址

说明:

  1. 脚本可以重复执行
  2. 若安装过程出现错误,可以查看文章最下面的FAQ。如果FAQ中没有您遇到的问题,那么欢迎在文章中评论留言,我会抽时间查看解决。
  3. 安装日志文件在/var/log/install_k8s.log,安装日志中有node join命令,如下:
    将join命令拷贝到node机器执行,加入到k8s集群中。附上一份我的安装日志:install_k8s.log

2.3 安装验证

验证docker是否安装成功

docker -v

验证docker-compose是否安装成功

docker-compose -v

验证k8s是否安装成功


kubectl get nodes

脚本中已经做了去污点[通过kubeadmin部署k8s,默认master上是不能被调度pod的,去污点就是在master上也可以被调度pod]
等待一会后,再通过kubectl get nodes查看,master状态已经正常了。

接下来,开始愉快的玩耍吧!O(∩_∩)O哈哈~

3. 小试牛刀

我们先来部署下nginx,看下刚刚部署的环境是否正常。 

启动nginx pod

kubectl run nginx-pod --image=nginx

查看pod

kubectl get pod -o wide

访问pod:

curl 10.244.0.4
此时只能通过上面的cluster-ip访问

将pod暴露成service:

kubectl expose pod nginx-pod --type=NodePort --port=80

查看service:

 kubectl get svc

此时在宿主机上映射一个随机端口,如下:

  • 此时nginx-pod就暴露到外网了,可以通过 curl localhost:31493访问[这里端口你的可能跟我的不一样]。

ok,到这里,基本上可以宣告您的k8s已经成功搭建!惊不惊喜O(∩_∩)O哈哈~

4. 节点主机:

利用 master 节点镜像快照, 复制一份,  然后重置 k8s 设置, 设置为节点主机

4.1 启动后,进入节点, 设置新的 IP ,  

vi /etc/sysconfig/network-script/ifcfg-enp0s3

修改 IPADDR=192.168.56.102

4.2: 设置机器名 : hostnamectl set-hostname node1

4.3: 配置端口转发:

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

4.4 在 master 生成加入命令, 复制到节点上执行

kubeadm token create --print-join-command

4.5 在 node 节点上重置 k8s 的设置, 冲掉 master 复制而来的设置

kubeadm reset 

4.6  把 4.4 复制的命令, 加入到 nodes,  命令类似于:

kubeadm join 192.168.56.101:6443 --token v9ilta.o83m802jek5a8wro     --discovery-token-ca-cert-hash sha256:657952968a48d2b303bd01e0ea487cad07e683bed62e127fc85027722cabac12

4.7 检阅成功:

kubectl get nodes

5. 总结

总结下来,整个安装步骤主要如下:

  1. 准备机器(cpu>2c 内存>2G 操作系统>Centos7)
  2. 保证网络畅通(最好能访问谷歌)
  3. 下载安装脚本
  4. 上传到服务器,然后执行 整个过程可以说是简单的不能再简单了。 ̄□ ̄||

6. FAQ

Q: [ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1

A: 执行 sysctl -w net.ipv4.ip_forward=1

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

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

相关文章

【STM32笔记】HAL库中的SPI传输(可利用中断或DMA进行连续传输)

【STM32笔记】HAL库中的SPI传输&#xff08;可利用中断或DMA进行连续传输&#xff09; SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&…

优秀软件测试报告

Document number 文档编号 Confidentiality level 密级 Test Report-01 [绝密/秘密/内部公开] Document version 文档版本 Total 10 pages 共 10 页 V1.0 测试报告 Prepared by 拟制 Date 日期 yyyy-mm-dd Reviewed by 评审人 Date 日期 yyyy-mm-dd Approved b…

CSS基础(超详解)

目录 1 css基础知识 1.1基础知识 1.1 概述 1.2 优势 1.3应用css的步骤 1.2 css基本语法 1.3 css使用方法 1.3.1 内嵌样式 1.3.2 内部样式 1.3.3 外部样式 1.3.4 使用import引入外部样式文件 1.3.5 叠层样式优先级 1.3.6 注释 2 CSS选择器 2.1 元素选择器 2.2 类…

Linux crontab定时任务设置

1.检查是否安装了crontab # rpm -qa | grep crontab 2.重启crontab服务 一定重启&#xff0c;这样确保了crontab服务的开启 # /etc/init.d/crond restart 3.我们直接以root用户进行操作。所以直接进到root的cron配置文件。 # cd /var/spool/cron/ 4.可以查看一下 root 用户…

VisDrone数据集之集群检测(一)

VisDrone坐标信息 VisDrone数据集格式: txt标签内容为&#xff1a;bbox_left&#xff0c;bbox_top&#xff0c;bbox_width&#xff0c;bbox_height&#xff0c;score,object_category&#xff0c;truncation&#xff0c;occlusion 类别&#xff1a; ignored regions(0), pede…

【一】曾经那些错误,你又踩坑了吗?

巩固基础和不断练习&#xff0c;我们才会进步&#xff01;这一期开始&#xff0c;我们就要看看我们之前的学过的知识到底掌握了没有&#xff0c;再通过练习去巩固&#xff01; 目录 一、for循环 二、指针有关内容 1.*&#xff08;解引用&#xff09;和其他运算符 2.指针变…

碰到CTS问题我该如何处理?

一、什么是CTS&#xff1f; CTS测试全称为系统兼容测试&#xff08;Compatibility Test suite&#xff09;&#xff0c;CTS是为了测试手机是否符合google定义的兼容性规范&#xff08;Compatibility Definition&#xff09;。从而基于Android的应用程序能在基于同一个api版本的…

网页JS自动化脚本(四)修改元素的尺寸颜色显隐状态

修改元素尺寸 在定位到了元素之后, 我们就可以对元素进行一些修改了,我们先来修改元素泊宽度以及高度 window.onloadfunction(){var theElementdocument.querySelector("img.undertips-link-lefticon");theElement.style.width"100px";theElement.style.…

BL200EC如何与欧姆龙相连

1、欧姆龙 NX1P2 的 Port1 接到电脑的网口&#xff0c;Port2 接到 BL200EC 的 ETH1 网口。 欧姆龙 NX1P2 和 BL200EC 通电。 2、打开 Sysmac Studio 软件&#xff0c;新建工程&#xff0c;选择 NX1P2-9024DT&#xff0c;点击创建。 ​ 编辑切换为居中 添加图片注释&#xf…

【云原生】服务网格kiali开发环境搭建问题解析

文章目录背景环境准备参考连接问题1&#xff1a;windows如何配置kiali开发环境问题2&#xff1a;kiali如何配置k8s连接问题3&#xff1a;kiali启动报错关键词&#xff1a;方便你们找到我背景 kiali&#xff08;凯莉&#xff09;是istio技术对应的管理系统&#xff0c;其前端为…

概率论与数理统计(1)——基本概念

引言 确定性&#xff08;必然&#xff09;&#xff1a;一定发生与一定不发生 随机现象&#xff1a;可能发生也可能不发生 随机事件 实验&#xff1a;对事物进行观察测量 随机试验&#xff1a;&#xff08;1&#xff09;在相同的条件下可以重复&#xff1b;&#xff08;2&…

oracle使用小结

1.安装时oracle12C去除勾选为创建为容器数据库 2.cmd命令 <1>.sqlplus/nolog // –运行sqlplus命令&#xff0c;进入sqlplus环境&#xff0c;nolog参数表示不登录&#xff1b; <2>.conn/as sysdba // **–以系统管理员(sysdba)**的身份连接数据库&#xff1b; …

[附源码]计算机毕业设计springboot健康医疗体检

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

记录--用JS轻松实现一个录音、录像、录屏的工具库

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 最近项目遇到一个要在网页上录音的需求&#xff0c;在一波搜索后&#xff0c;发现了 react-media-recorder 这个库。今天就跟大家一起研究一下这个库的源码吧&#xff0c;从 0 到 1 来实现一个 R…

EL 与 JSTL(1)( EL 表达式基础知识)

EL 表达式用美元符号“$”定界&#xff0c;内容包含在一对花括号“{}”中&#xff0c;例如&#xff1a;${expression}。 EL 表达式语法很简单&#xff0c;它最大的特点就是使用很方便。 1.EL 表达式特点 &#xff08;1&#xff09;在 EL 表达式中可以获得命名空间&#xff08;…

uni-app入门:全局数据共享方案之mobx

1.全局数据共享介绍 2.准备工作 3.使用说明 3.1 page页面进行全局数据共享 3.2 component组件进行全局数据共享 1.全局数据共享介绍全局数据共享也叫作状态管理,主要用于组件间数据共享问题的处理.实际开发中常用的实现方案:vuex、redux、mobx&…

西山科技将于12月6日上会:年收入2亿元,耗材收入成为新增长点

11月29日&#xff0c;上海证券交易所科创板披露的信息显示&#xff0c;重庆西山科技股份有限公司&#xff08;下称“西山科技”&#xff09;将于2022年12月6日接受科创板上市委的现场审议。目前&#xff0c;西山科技已经更新了招股书&#xff08;上会稿&#xff09;。 据贝多财…

uni-app 使用 webview运行到小程序,打开萤石云视频

由于微信小程序特殊性&#xff0c;导致APP和h5适应的它都适应不了&#xff0c;因此&#xff0c;不得不对小程序做一些特殊的处理。 问题一&#xff1a;微信小程序无法打开web-view 的URL 相对于APP和H5而言&#xff0c;微信小程序比较严格&#xff0c;对于打开外链这种功能&a…

综述向:强化学习方法梳理(持续更新)

最近组内需要做强化学习相关研究&#xff0c;因为面对的是新项目&#xff0c;同事们对强化学习的原理都不太了解&#xff0c;我们就计划轮流在组内做一些不定期分享&#xff0c;补充相关的基础知识。于是我对强化学习的一些经典算法进行了梳理&#xff0c;并在此进行记录&#…

Observability:从零开始创建 Java 微服务并监控它 (一)

在本教程中&#xff0c;你将学习如何使用 Elastic 可观察性监控 Java 应用程序&#xff1a;日志、基础设施指标、APM 和正常运行时间。通过本教程&#xff0c;你将学到&#xff1a; 创建示例 Java 应用程序。使用 Filebeat 提取日志并在 Kibana 中查看你的日志。使用 Metricbe…