Kubernetes集群搭建

news2024/9/27 17:28:42

Kubernetes集群搭建

目录

  • 前言
  • 前期准备
  • K8S集群安装
    • 虚拟机设置
    • 安装K8S集群
    • k8s部署Nginx
  • 附录1 Docker安装
  • 附录2 yum k8s 问题
  • 附录3 k8s start问题
  • 附录4 k8s master init
  • 附录5 node节点添加进集群失败,可以删除节点重新添加



前言

本文指定Docker与K8s版本,保证兼容性,可供参考

  • Docker‐ce‐3:19.03.9‐3.el7.x86_64
  • Kubelet‐1.18.0
  • Kubeadm‐1.18.0
  • Kubectl‐1.18.0



前期准备

  • 三台双核4GB内存,centos7+操作系统的虚拟机
    • 192.168.***.133
    • 192.168.***.134
    • 192.168.***.135
  • 三台虚拟机安装Docker (详见附录1)


K8S集群安装



虚拟机设置

三台虚拟机执行以下命令

# 1.关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

# 2.关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久关闭(或者选择permissive宽容模式,disable在aarch64架构虚拟机开机docker无法运行)  
setenforce 0 # 临时关闭

# 3.关闭 swap
swapoff -a # 临时关闭
vim /etc/fstab # 永久关闭
#注释掉swap这行
# /dev/mapper/centos‐swap swap swap defaults 0 0
systemctl reboot #重启生效
free -m #查看下swap交换区是否都为0,如果都为0则swap关闭成功

# 4.给三台机器分别设置主机名
hostnamectl set-hostname <hostname>
# 第一台:k8smaster
# 第二台:k8snode1
# 第三台:k8snode2

# 5.在k8s‐master机器添加hosts,执行如下命令,ip需要修改成你自己机器的ip
cat >> /etc/hosts << EOF
192.168.***.133 k8s-master
192.168.***.134 k8s-node1
192.168.***.135 k8s-node2
EOF

sysctl --system # 生效

# 6.将桥接的IPv4流量传递到iptables
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
# 立即生效
sysctl -p  /etc/sysctl.d/k8s.conf

# 7.设置时间同步
yum install ntpdate -y
ntpdate time.windows.com



安装K8S集群

# 1、设置k8s yum源  
# x86: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
# aarch64: https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64
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

# 2、如果之前安装过k8s,先卸载旧版本
yum remove -y kubelet kubeadm kubectl

# 3、查看可以安装的版本
yum list kubelet --showduplicates | sort -r

# 4、安装kubelet、kubeadm、kubectl 指定版本,我们使用kubeadm方式安装k8s集群
# 此处出现的问题:附录二
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0

# 5、开机启动kubelet
systemctl enable kubelet

# 6、在k8s-master机器上执行初始化操作(里面的第一个ip地址就是k8s-master机器的ip,改成你自己机器的,后面两个ip网段不用动)
# 此处出现的问题: 附录四
kubeadm init --apiserver-advertise-address=192.168.***.133 --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 --ignore-preflight-errors=Swap

# 7.启动k8s (启动失败现象,附录三)
systemctl start kubelet
# 查看启动状态
systemctl status kubelet -l 
# 查看启动日志
journalctl -xefu kubelet

# 在k8s-master上配置使用 kubectl 命令工具(类似docker这个命令),
 mkdir -p $HOME/.kube
 sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
 sudo chown $(id -u):$(id -g) $HOME/.kube/config

#查看kubectl是否能正常使用
kubectl get nodes

#安装 Pod 网络插件
kubectl apply -f https://docs.projectcalico.org/v3.10/manifests/calico.yaml
# 如果上面这个calico网络插件安装不成功可以试下下面这个
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kubeflannel.yml
# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml


## 将node节点加入进master节点的集群里 (三台机器都执行)
kubeadm join 192.168.145.133:6443 --token xiwdb1.ivwp175n7l2c7mad \
    --discovery-token-ca-cert-hash sha256:7ff5423635326f54a5b901f4caec367170fa6d2f29fe095434d5d42d6f0bfe93

kubeadm init 成功
在这里插入图片描述

kubeadm join 192.168.145.133:6443 --token xiwdb1.ivwp175n7l2c7mad \
    --discovery-token-ca-cert-hash sha256:7ff5423635326f54a5b901f4caec367170fa6d2f29fe095434d5d42d6f0bfe93



k8s部署Nginx

在k8smaster上执行:

# 创建一次deployment部署
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看Nginx的pod和service信息
kubectl get pod,svc -o wide

启动成功:
在这里插入图片描述
访问Nginx地址: http://任意node节点的ip:图中Nginx的对外映射端口,http://192.168.***.134:32127
在这里插入图片描述



附录1 Docker安装

  • Docker 要求 CentOS 系统的内核版本高于 3.10
    # 查看内核版本
    uname ‐r
    
  • 安装需要的软件包, yum-utils提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
    # yum-util 提供yum-config-manager功能
    yum install -y yum‐utils
    # 设置yum源,并更新 yum 的包索引
    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    yum makecache fast
    # 注意: 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
    # vim /etc/yum.repos.d/docker-ce.repo
    #   将[docker-ce-test]下方的enabled=0修改为enabled=1
    #
    # 安装指定版本的Docker-CE:
    # Step 1: 查找Docker-CE的版本:
    # yum list docker-ce.x86_64 --showduplicates | sort -r
    #   Loading mirror speeds from cached hostfile
    #   Loaded plugins: branch, fastestmirror, langpacks
    #   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
    #   docker-ce.x86_64            17.03.1.ce-1.el7.centos            docker-ce-stable
    #   docker-ce.x86_64            17.03.0.ce-1.el7.centos            docker-ce-stable
    #   Available Packages
    # Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
    # sudo yum -y install docker-ce-[VERSION]
    
  • 查看所有仓库中所有docker版本,并选择特定版本安装
    yum list docker-ce --showduplicates | sort -r
    
  • 安装docker
    yum install docker-ce-19.03.9-3.el7 -y # 这是指定版本安装
    
  • 启动docker并加入开机启动
    systemctl start docker && systemctl enable docker
    
  • 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
    docker version
    
    在这里插入图片描述
  • docker 镜像加速
    • 登录阿里云https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
      在这里插入图片描述


附录2 yum k8s问题

  • ‘ascii’ codec can’t decode byte 0xe2 in position 719: ordinal not in range(128)
    • 原因: 网上搜是python2的编码问题
    • 解决方法:
      cat > /usr/lib/python2.7/site-packages/sitecustomize.py << EOF
       #encoding=utf8
       import sys
       reload(sys)
       sys.setdefaultencoding('utf-8')
       EOF
      
      # 重启python编译器
      python
      



附录3 k8s start问题

  • systemctl status kubelet -l 查看k8s启动状态发现启动失败,
    在这里插入图片描述
    • journalctl -xefu kubelet 查看启动日志,发现:

      Jan 30 10:30:20 k8s-node1 kubelet[1797]: F0130 10:30:20.011562 1797 server.go:199] failed to load Kubelet config file /var/lib/kubelet/config.yaml, error failed to read kubelet config file “/var/lib/kubelet/config.yaml”, error: open /var/lib/kubelet/config.yaml: no such file or directory

    • 解决方案:

      # 执行kubeadm init
      kubeadm init --kubernetes-version=v1.18.0 --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=172.16.0.0/16 --apiserver-advertise-address=192.168.***.***
      



附录4 k8s master init问题

  • [WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at https://kubernetes.io/docs/setup/cri/
    
    • 原因:检测到"cgroupfs"作为Docker的cgroup驱动程序。 推荐使用systemd驱动需要更换驱动,修改docker Driver
    • 解决方案:
      # 修改配置文件
      vim /etc/docker/daemon.json
      # 增加以下配置json
      {
      "exec-opts":["native.cgroupdriver=systemd"]
      }
      # 重启docker
      systemctl restart docker
      



附录5 node节点添加进集群失败,可以删除节点重新添加

要删除 k8s­node1 这个节点,首先在 master 节点上依次执行以下两个命令

kubectl drain k8snode1 --delete-local-data --force --ignore-daemonsets
kubectl delete node k8snode1

执行后通过 kubectl get node 命令可以看到 k8s­node1 已被成功删除 接着在 k8s­node1 这个 Node 节点上执行如下命令,这样该节点即完全从 k8s 集群中脱离开来,之后就可以重新执 行命令添加到集群

kubeadm reset

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

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

相关文章

DynaSLAM-3 DynaSLAM中Mask R-CNN部分源码解析(Ⅱ)

目录 1.FPN 1.1 FPN层原理 1.2 FPN代码解析 2. 候选框的生成 2.1 根据特征图生成候选框 1.FPN 1.1 FPN层原理 在Faster R-CNN网络中&#xff0c;提取特征的时候&#xff0c;将原始数据经过一系列的卷积层&#xff0c;我们只用最后一层的特征图进行提取。 比如五层卷积神经…

C++(36)-VS2019- 动态库调用

1.被调用的动态库 MyDll 2.调用的可执行文件 MyExe 源码实例链接&#xff1a;MFC-VS2019-EXE调用DLL-demo.zip-C代码类资源-CSDN下载 1.MyDll 1.1 MyDll头文件&#xff1a;MyDll.h 声明此动态库为导出动态库。 声明导出函数。 #pragma once#define MYDECLARE_PUB…

【05】FreeRTOS的中断管理

目录 1.什么是中断 2.中断优先级分组 2.1中断优先级分组-介绍 2.2中断优先级分组-配置 2.3中断优先级分组-特点 3.中断相关寄存器 3.1寄存器地址 3.2在FreeRTOS中配置PendSV和Systick中断优先级 3.3中断相关寄存器 4.FreeRTOS中断管理实验 4.1修改freertos_demo.c …

2023.1.30作业-【尝试移植TF-A】

1、解压源码&#xff0c;进入目录如图一 2、解压源码包 3、进入解压后的目录&#xff0c;打入官方补丁 4、查看SD卡的分区&#xff0c;发现正常无需重新分区 5、导入编译工具查看是否正常导入 6、添加设备树等相关文件 7、修改上层目录下的 Makefile.sdk中添加 stm32mp157a-fsm…

chatGPT模型简介

ChatGPT的工作原理 chatGPT 是一款由 OpenAI 开发的聊天机器人模型&#xff0c;它能够模拟人类的语言行为&#xff0c;与用户进行自然的交互。它的名称来源于它所使用的技术—— GPT-3架构&#xff0c;即生成式语言模型的第3代。 chatGPT的核心技术是 GPT-3 架构。它通过使用大…

vue 自动生成swagger接口请求文件

前端: vue-element-admin 后端: .net core (6.0) 找了很多自动生成的代码的&#xff0c;感觉不太行&#xff0c;可能是我不太懂。所以自己根据swagger.json去生成了js请求文件。 后端很简单&#xff0c;就不说了&#xff0c;只要能访问到swagger的地址就可以&#xff0c;主要…

【My Electronic Notes系列——低频功率放大器】

目录 序言&#xff1a; &#x1f3c6;&#x1f3c6;人生在世&#xff0c;成功并非易事&#xff0c;他需要破茧而出的决心&#xff0c;他需要永不放弃的信念&#xff0c;他需要水滴石穿的坚持&#xff0c;他需要自强不息的勇气&#xff0c;他需要无畏无惧的凛然。要想成功&…

【自学Docker】Docker rename命令

Docker rename命令 大纲 docker rename命令教程 docker rename 命令可以用于重命名一个 Docker容器。docker rename命令后面的 CONTAINER 可以是容器Id&#xff0c;或者是容器名。 docker rename语法 haicoder(www.haicoder.net)# docker rename CONTAINER NEW_NAME案例 重…

【Kubernetes 企业项目实战】05、基于云原生分布式存储 Ceph 实现 K8s 数据持久化(下)

目录 一、K8s 对接 ceph rbd 实现数据持久化 1.1 k8s 安装 ceph 1.2 创建 pod 挂载 ceph rbd 二、基于 ceph rbd 生成 pv 2.1 创建 ceph-secret 2.2 创建 ceph 的 secret 2.3 创建 pool 池 2.4 创建 pv 2.5 创建 pvc 2.6 测试 pod 挂载 pvc 2.7 注意事项 1&#xf…

软考高项—第一章信息系统项目管理基础

项目特点 1、临时性&#xff1a;有明确的开始时间和结束时间 2、独特的产品、可交付成果 3、逐步完善&#xff1a;项目团队从开始的粗略计划到详细计划&#xff0c;在到完成项目 4、资源约束&#xff1a;每个项目都需要各种资源保证&#xff0c;资源是有限的 5、目的性&#x…

C语言重点复习大纲

目录数据存储(3星)判断大小端写一个函数判断大小端截断与整形提升数组和指针(5星)几个特殊的指针数组传参字符串数组库函数的实现(4星)atoi与itoamemcpy与memmove内存重叠自定义类型(4星)内存对齐结构体&#xff0c;联合体&#xff0c;枚举位段编译链接(3星)编译和链接的过程条…

循环队列实现---kfifo

循环队列 概述 在优化系统性能时&#xff0c;我们通常需要分析一个单线程程序各模块的功能和性能&#xff0c;然后将这些模块拆分到多个线程中并行执行。而多个线程之间需要加入缓存以实现线程间的通信。如图1所示&#xff1a; 图1&#xff1a;多线程缓存为方便进程间通信&am…

Python【xpath】实战下

项目要求&#xff1a;获取某二手租房平台关于房源信息的简介和价格代码&#xff1a;python编写&#xff0c;实现需要准备的第三方库&#xff1a;requests &#xff0c;lxml&#xff0c; time代码分析&#xff1a;导入需要使用的第三方库&#xff1a;import requests import tim…

java ssm校园快递代领系统的设计与实现idea maven

近几年随着国民经济的不断发展&#xff0c;电子商务行业的不断创新。作为物流业一个重要分支的校园快递代领逐渐兴起&#xff0c;各种快递公司层出不穷。校园快递代领在不断向前发展的同时也存在一些无法避免的小问题&#xff0c;例如许多小型的快递公司在信息处理和管理上存在…

基于微信小程序的民宿短租系统小程序

文末联系获取源码 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏览器…

Spring Boot Actuator详解

Actuator简介 什么是Spring Boot Actuator&#xff1f; Spring Boot Actuator 模块提供了生产级别的功能&#xff0c;比如健康检查&#xff0c;审计&#xff0c;指标收集&#xff0c;HTTP跟踪等&#xff0c;帮助我们监控和管理Spring Boot应用。这个模块是一个采集应用内部信…

react知识点整理

1、react hooks是用来做什么的? 加入hooks,让react函数组件更加的灵活 hooks之前,React存在很多问题: 1、组件间服用状态逻辑难2、复杂组件变的难以理解,高阶组件和函数组件的嵌套过深3、class组件的this问题4、难以记忆的生命周期hooks有: useState()useEffects()useR…

从头开始创建一个OData SAP Gateway Service

可能用到的事务代码&#xff1a;/IWFND/IWF_ACTIVATE – Activate / Deactivate SAP GatewaySEGW – SAP Gateway Service Builder/IWFND/MAINT_SERVICE – Activate and Maintain Services/IWFND/EXPLORER – Service Explorer/IWFND/GW_CLIENT – SAP Gateway Client/IWFND/S…

Android | 输入系统(IMS)

前言 一般情况下很多同学对于点击事件的认识都只存在于从 Activity 开始的&#xff0c;然后从 Window 中进行分发&#xff0c;甚至有些人可能也只知道 onTouchEvent 和 dispatchTouchEvetn 这几个方法&#xff0c;对于 View 层的了解都不属性。 自从对于应用层面的分发过程了…

logging日志模块详解

说到日志&#xff0c;无论是写框架代码还是业务代码都离不开日志的记录&#xff0c;其能给我们定位问题带来极大的帮助。 记录日志最简单的方式是在你想要记录的地方加上一句print。我相信无论是新手还是老鸟都经常这么干&#xff0c;在简单的代码或者小型项目中这么干一点问题…