Centos搭建k8s

2023-11-02

在CentOS 7上搭建Kubernetes集群

kubeadm官方文档
https://blog.51cto.com/zhangxueliang/4952945

前置步骤(所有结点)

  • CentOS 7.9 物理机或虚拟机三台,CPU 内核数量大于等于 2,且内存大于等于 4G
  • hostname 不是 localhost,且不包含下划线、小数点、大写字母
  • 任意节点都有固定的内网 IP 地址(集群机器统一内网)
  • 任意节点上 IP 地址 可互通(无需 NAT 映射即可相互访问),且没有防火墙、安全组隔离
  • 任意节点不会直接使用 docker run 或 docker-compose 运行容器和Pod

关闭防火墙,或者阿里云开通安全组端口访问

$ sudo systemctl stop firewalld & sudo systemctl disable firewalld

关闭selinux

$ sed -i 's/enforcing/disabled/' /etc/selinux/config
$ setenforce 0

永久关闭swap

$ swapoff -a
$ sed -ri 's/.*swap.*/#&/' /etc/fstab

将桥接的 IPv4 流量传递到 iptables 的链。修改/etc/sysctl.conf

net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.forwarding=1

执行命令以应用

$ sudo sysctl -p

安装容器运行时(所有结点)

下面的过程安装了docker v23.0, containerd v1.6.18, nerdctl v1.2.1。

按照docker官方文档 即可。

为了规避问题1 以及问题2 需要修改所有结点上的containerd配置(参考这里):

$ cat <<EOF | sudo tee /etc/containerd/config.toml
version = 2
[plugins]
[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"
EOF
$ sudo systemctl restart containerd
$ sudo containerd config dump|grep sand
   sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

安装nerdctl

$ wget https://github.com/containerd/nerdctl/releases/download/v1.2.1/nerdctl-1.2.1-linux-amd64.tar.gz
$ tar xzvf nerdctl-1.2.1-linux-amd64.tar.gz
$ sudo cp nerdctl /usr/local/bin/
$ sudo nerdctl namespace ls

安装Kubernetes(所有结点)

卸载旧版本

$ sudo yum remove -y kubelet kubeadm kubectl

配置k8s源。准备文件/etc/yum.repos.d/kubernetes.repo

[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
       http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg

安装kubelet、kubeadm、kubectl

$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes

启动kubelet。注意,如果此时查看kubelet的状态,他会无限重启,等待接收集群命令,和初始化。这个是正常的。

$ sudo systemctl enable kubelet && systemctl start kubelet

国外镜像下载问题

因谷歌网络限制问题,国内的K8ser大多数在学习Kubernetes过程中因为镜像下载失败问题间接地产生些许失落感,笔者也因此脑壳疼,故翻阅资料得到以下解决方式:
在应用yaml文件创建资源时,将文件中镜像地址进行内容替换即可:

  • k8s.gcr.io 地址替换为registry.aliyuncs.com/google_containers
  • quay.io 地址替换为quay.mirrors.ustc.edu.cn或者quay-mirror.qiniu.com
  • gcr.io地址替换为registry.aliyuncs.com

kubeadm依赖的所有镜像可以用如下脚本下载:

$ echo <<EOF | tee kubeadm-images.sh
#!/bin/bash
images=$(kubeadm config images list)
for image in ${images[@]} ; do
   imageMirror="registry.aliyuncs.com/google_containers/"$(echo $image | awk -F '/' '{print $NF}')
   echo $image "->" $imageMirror
   docker pull $imageMirror
   docker tag $imageMirror $image
   docker rmi $imageMirror
done
EOF
$ sudo bash kubeadm-images.sh

新版本的kubeadm不再需要上述trick,选项--image-repository指向国内mirror即可。

初始化master结点(单个master结点)

初始化master,成功将输出“初始化worker结点”的命令

$ sudo kubeadm init --image-repository=registry.aliyuncs.com/google_containers
[init] Using Kubernetes version: v1.26.1
......

如果init失败,可以"kubeadm reset --force"后再次尝试。

配置kubectl

$ export KUBECONFIG=/etc/kubernetes/admin.conf

nerdctl文档指出:containerd中的container和image都有namespace属性。默认default,kubernetes用的是k8s.io。
按namespace统计容器和image数量

$ sudo nerdctl namespace ls
NAME      CONTAINERS    IMAGES    VOLUMES    LABELS
k8s.io    21            36        0              
moby      0             0         0              

列出所有kubernetes本地容器

$ sudo nerdctl -n k8s.io ps

初始化worker结点(多个worker结点)

使用刚才master打印的令牌命令加入。如果下面命令失败,可从上一节"初始化master结点"从头再来。

$ sudo kubeadm join 192.168.110.48:6443 --token dna6ti.7hu4gx3r43rid67w --discovery-token-ca-cert-hash sha256:d68e1e0398dadac6d7196faac56bc9447a499203f30a1e46daf874d59aaf493d

如果超过2小时忘记了令牌,可在master上执行如下命令再次打印令牌

$ sudo kubeadm token create --print-join-command

在master结点观察worker结点状态

$ kubectl get nodes  
NAME   STATUS   ROLES           AGE    VERSION  
vm48   Ready    control-plane   85m    v1.26.1  
vm49   Ready    <none>          8m1s   v1.26.1  
vm50   Ready    <none>          41s    v1.26.1

配置pod网络插件calico

注意:官方文档已指出,在安装pod网络插件之前,coredns不会启动。
Calico在Cilium之后添加了基于eBPF的数据面 ,用户可在iptables和eBPF之间选择,默认是iptables。

部署calico

$ curl -o calico-v3.25.yaml https://raw.githubusercontent.com/projectcalico/calico/release-v3.25/manifests/calico.yaml
$ kubectl apply -f calico-v3.25.yaml

查看状态,等待calico和coredns相关pod就绪。注意,coredns仅在部署pod网络插件后启动

$ watch kubectl get pod -n kube-system -o wide

冒烟测试:部署nginx服务,测试dns解析服务名

$ cat <<EOF | sudo tee nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
          - containerPort: 80
            hostPort: 80
            protocol: TCP
          - containerPort: 443
            hostPort: 443
            protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-srv
spec:
  clusterIP: None
  ports:
  - port: 80
    name: http
  - port: 443
    name: https
  selector:
    app: nginx
EOF
$ kubectl apply -f nginx.yaml
$ kubectl run -it busybox --image=busybox --restart=Never
/ # ping nginx-srv
PING nginx-srv (172.16.33.196): 56 data bytes  
64 bytes from 172.16.33.196: seq=0 ttl=62 time=1.146 ms  
64 bytes from 172.16.33.196: seq=1 ttl=62 time=0.703 ms  
^C
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Centos搭建k8s 的相关文章

随机推荐

  • EXT2.2 grid行不能复制信息的解决方法

    在ext all js的后面加入如下js if Ext grid GridView prototype templates Ext grid GridView prototype templates Ext grid GridView pr
  • 当下用途最广的计算机语言,目前为止国际上最主流的计算机编程语言是什么?...

    看主流的观察角度 如果是这些语言编写的软件的用户数量最多 那么肯定是C和C 了 因为我们的操作系统 例如WINDOWS IOS LINUX 和核心应用程序 例如OFFICE IE CHROME 以及绝大多数的游戏 几乎全都是C和C 以及少量
  • 除了中国好声音,星空华文冲刺港股IPO还有其他王牌吗?

    回顾国内的综艺节目发展史 中国好声音 曾是里程碑式的存在 曾一度稳坐各大省级卫视综艺节目收视率的头把交椅 更是民间歌手们心中殿堂级的存在 但它背后的制作公司 星空华文似乎却江河日下 5月13日 星空华文再次发起IPO 这一回选择登陆的是港交
  • JSP中,AJAX使用POST方式提交中文乱码问题解决

    本人原创 欢迎转载 转载请保留本人信息 作者 wallimn 电邮 wallimn sohu com 博客 http blog csdn net wallimn 时间 2006 11 15 本人原创 欢迎转载 转载请保留本人信息 今天终于解
  • Python编程:从入门到实践(基础知识)

    第一章 起步 计算机执行源程序的两种方式 编译 一次性执行源代码 生成目标代码 解释 随时需要执行源代码 源代码 采用某种编程语言编写的计算机程序 目标代码 计算机可执行 101010 编程语言分为两类 静态语言 使用编译执行的编程语言 C
  • java.library.path属性在代码中设置不生效问题

    http www blogjava net gembin archive 2008 10 29 237377 html from http daimojingdeyu blogbus com logs 28617218 html 可是在使用
  • 如何用wps制作地图分布图_如何用Power BI制作自己的可视化地图

    作者 AgnesJ 在之前的文章中介绍过Power BI的形状地图 使用形状地图我们可以导入自己想要的任何地图 只要找到对应的TopoJson格式地图文件就可以 但是当我们需要分析某一个销售区域 或服务范围时 如何获取或者创建自己的Json
  • 让div撑满整个屏幕的方法(css)

    在body只有一个div的时候 可以通过这样的方式让div撑满整个屏幕 1 给div设置定位 复习一下 css中position有五种属性 static 默认值 没有定位 absolute 绝对定位 相对于父级元素进行定位 relative
  • aop统一日志输出controller出入参及部分参数

    输出使用的jackson 其中获取iputil放在另一篇文章 gt gt gt gt IpUtil获取ip author cy c date 2022 5 19 16 28 统一日志处理 Component Aspect public cl
  • JTS:04 读取数据库数据

    版本 org locationtech jts jts core 1 19 0 链接 github 数据库 创建数据库方式 postgresql 使用postgis插件 kartoza postgis 15 3 3 使用docker容器 创
  • C++中#pragma once与#ifndef的区别

    为了避免同一个文件被include 多次 可以使用两种方式 1 方式一 ifndef SOMEFILE H define SOMEFILE H 声明语句 endif 2 方式二 pragma once 声明语句 两者的区别 ifndef方式
  • Struts2识别与漏洞利用

    Struts2框架识别 1 通过网页后缀来进行判断 如 do或者 action Struts2漏洞验证 Struts2 045漏洞介绍 安恒信息安全研究院WEBIN实验室高级安全研究员nike zheng发现著名J2EE框架 Struts2
  • 3.【Python】分类算法—Softmax Regression

    3 Python 分类算法 Softmax Regression 文章目录 3 Python 分类算法 Softmax Regression 前言 一 Softmax Regression模型 1 Softmax Regression模型
  • 2023华为od机试真题B卷Python【矩阵里的非一元素】

    题目 假设存在一个m n的二维数组 其成员取值范围为0 1和2 1具有同化特性 它具体的同花步骤是 每经过1秒 如果其上下左右值为0 那么修改为1 而值为2的元素不会有任何变化 初始时 将数组的 0 0 元素修改为1 经过足够长的时间后 需
  • 应用于SSVEP脑电信号识别的CCA算法

    应用于SSVEP脑电信号识别的CCA算法 1 SSVEP信号 2 应用于SSVEP信号的CCA算法 1 SSVEP信号 SSVEP是指当受到一个固定频率的视觉刺激的时候 人的大脑视觉皮层会产生一个连续的与刺激频率有关 刺激频率的基频或倍频处
  • phpstudy站点404访问遭到拒绝 首页可以访问 接口不能访问

    问题描述 新站站点可以使用 关机再开不能使用 新建站点 不能访问接口 可以访问首页 接口404 直接入正题 入口文件夹里有一个文件 htaccess 这个文件打开如果没有内容 问题就出现在这
  • 清华汪玉创始公司浮出水面,要做大模型一体机,仍是“深鉴式”师生组合拳...

    衡宇 发自 凹非寺量子位 公众号 QbitAI 清华大学电子工程系系主任汪玉 再一次躬行实践 产学结合 具体领域 与大模型紧密相关 量子位获悉 汪玉担任创始人身份的新公司无问芯穹 主要做大模型推理用一体机 以及工具链软件 公司旨在解决大模型
  • J-Tech Talk | 编写Dockerfile的最佳实践

    J Tech Talk 由 Jina AI 社区为大家带来的技术分享 工程师们将深入细节地讲解具体的问题 分享 Jina AI 在开发过程中所积累的经验 不论是个人开发者还是企业 上云已经成为基本的需求 使用 Dockerfile 构建 D
  • debug assertion failed 的一种解决方法

    在使用C 编写程序时 使用到了如同以下的程序 scene addItem originalPixmap 出现debug assertion failed错误 查找原因 发现代码并没有问题 罪魁祸首是 变量 scene 的声明在 origin
  • Centos搭建k8s

    在CentOS 7上搭建Kubernetes集群 kubeadm官方文档 https blog 51cto com zhangxueliang 4952945 前置步骤 所有结点 CentOS 7 9 物理机或虚拟机三台 CPU 内核数量大