1-k8s1.23.6-底座搭建-基于docker

news2024/12/28 20:18:40

这里写自定义目录标题

    • 一、服务器准备
    • 二、安装docker
    • 三、安装k8s
    • 四、安装部署dashboard

一、服务器准备

  1. 服务器准备

    服务器名称服务器IP角色CPU(最低要求)内存(最低要求)
    master192.168.248.10master2核2G
    worker1192.168.248.11node2核2G
    worker2192.168.248.12node2核2G
  2. 修改ip:vi /etc/sysconfig/network-scripts/ifcfg-ens33

  3. 修改主机名:hostnamectl set-hostname master

  4. 修改主机名与ip映射:vi /etc/hosts

    192.168.248.10 master
    192.168.248.11 worker1
    192.168.248.12 worker2
    
  5. 重置网络:service network restart

  6. 关闭防火墙:systemctl stop firewalld

  7. 禁用selinux

    [root@localhost ~]# setenforce 0 
    [root@localhost ~]# getenforce
    Permissive
    

    ps:永久禁用方法(需重启服务器)

    sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
    
  8. 关闭swap:swapoff -a

    ps1:swap分区指的是虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间虚拟成内存来使用。但是会对系统性能产生影响。所以这里需要关闭。如果不能关闭,则在需要修改集群的配置参数

    ps2:永久关闭方法,需重启服务器

    sed -ri 's/.*swap.*/#&/' /etc/fstab
    
  9. 查看:free -m

    在这里插入图片描述

  10. bridged网桥设置

    1)概念:为了让服务器的iptables能发现bridged traffic,需要添加网桥过滤和地址转发功能

    2)新建modules-load.d/k8s.conf文件:vi /etc/modules-load.d/k8s.conf

    overlay
    br_netfilter
    

    3)新建sysctl.d/k8s.conf文件:vi /etc/sysctl.d/k8s.conf

    net.bridge.bridge-nf-call-ip6tables = 1
    net.ipv4.ip_forward                 = 1
    net.bridge.bridge-nf-call-iptables = 1
    

    4)加载配置文件:sysctl --system

    5)加载br_netfilter网桥过滤模块 :modprobe br_netfilter

    6)加载网络虚拟化技术模块:modprobe overlay

    7)检验网桥过滤模块是否加载成功:lsmod | grep -e br_netfilter -e overlay
    在这里插入图片描述

  11. 配置IPVS

    1)概念:service有基于iptables和基于ipvs两种代理模型。基于ipvs的性能要高一些。需要手动载入才能使用ipvs模块

    2)安装ipset和ipvsadm:yum install ipset ipvsadm

    3)新建脚本文件:vi /etc/sysconfig/modules/ipvs.modules

    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack_ipv4
    

    4)添加执行权限给脚本文件,然后执行脚本文件

    chmod +x /etc/sysconfig/modules/ipvs.modules
    /bin/bash /etc/sysconfig/modules/ipvs.modules
    

    5)检验模块是否加载成功:lsmod | grep -e ip_vs -e nf_conntrack_ipv4
    在这里插入图片描述

二、安装docker

ps:三台服务器都装

  1. 下载:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

  2. 启动:systemctl start docker

  3. 设置开机自启动:systemctl enable docker

  4. 验证:docker images

  5. docker设置阿里云加速器和cgroup驱动程序:vi /etc/docker/daemon.json (没有的话,需要自己创建该文件)

    {
      "registry-mirrors": [
          "https://ustc-edu-cn.mirror.aliyuncs.com/",
          "https://hub-mirror.c.163.com",
          "https://mirror.baidubce.com",
          "https://bh9y01q2.mirror.aliyuncs.com"],
      "exec-opts": ["native.cgroupdriver=systemd"]
    }
    

    ps:endpoint = [“https://bh9y01q2.mirror.aliyuncs.com”],这个地址可以自己取阿里云注册使用

    1)登录阿里云:https://www.aliyun.com/

    2)获取平台分配的镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
    在这里插入图片描述
    在这里插入图片描述

  6. 重新导入配置:systemctl daemon-reload

  7. 重启:systemctl restart docker

  8. 查看是否配置成功:docker info

在这里插入图片描述

三、安装k8s

ps:三台服务器都装

  1. 安装kubelet、kubeadm、kubectl

    1)添加yum源:vi /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
    

    2)下载:yum install -y --setopt=obsoletes=0 kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

    3)配置: systemctl enable kubelet --now

    4)相关概念

    1. obsoletes等于1表示更新旧的rpm包的同时会删除旧包,0表示更新旧的rpm包不会删除旧包
    2. kubelet启动后,可以用命令journalctl -f -u kubelet查看kubelet更详细的日志
    3. kubelet默认使用systemd作为cgroup driver
    4. 启动后,kubelet现在每隔几秒就会重启,因为它陷入了一个等待kubeadm指令的死循环
    
  2. 下载各个机器需要的镜像

    1)查看集群所需镜像的版本:kubeadm config images list

    2)创建文件夹:mkdir /opt/k8s

    3)创建文件:vi /opt/k8s/images.sh

    #!/bin/bash
    
    images=(
    kube-apiserver:v1.23.17
    kube-controller-manager:v1.23.17
    kube-scheduler:v1.23.17
    kube-proxy:v1.23.17
    pause:3.6
    etcd:3.5.1-0
    coredns:v1.8.6
    )
    for imageName in ${images[@]} ; do
    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName
    done
    
    kube-apiserver:v1.24.0  #接口服务,给予rest风格开放k8s的接口服务
    kube-controller-manager:v1.24.0 #控制管理器,管理各个类型的控制器,针对k8s中的各个资源进行管理
    kube-scheduler:v1.24.0 #调度器,将pod根据一定的算法调用到合适的节点上
    kube-proxy:v1.24.0 #网络代理,负责service的服务发现负载均衡
    pause:3.7
    etcd:3.5.3-0 #理解为ks的数据库,键值类型存储的分布式数据库,提供了基于Raft算法实现自主的集群高可用。老版本:基于内存。新版本:持久化存储
    coredns:v1.8.6 #网络配置
    

    4)赋权: chmod +x /opt/k8s/images.sh

    5)执行下载: /opt/k8s/images.sh

  3. 初始化主节点(只在master节点执行)

    kubeadm init --apiserver-advertise-address=192.168.248.10 --control-plane-endpoint=master --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version v1.23.6 --service-cidr=10.96.0.0/16 --pod-network-cidr=192.169.0.0/16 
    

    ps:–pod-network-cidr跟主机网络必须不同

    ps:将最后一段标黑的保存,后续使用

    在这里插入图片描述

    参数说明

    	  --apiserver-advertise-address string   设置 apiserver 绑定的 IP.
          --apiserver-bind-port int32            设置apiserver 监听的端口. (默认 6443)
          --apiserver-cert-extra-sans strings    api证书中指定额外的Subject Alternative Names (SANs) 可以是IP 也可以是DNS名称。 证书是和SAN绑定的。
          --cert-dir string                      证书存放的目录 (默认 "/etc/kubernetes/pki")
          --certificate-key string                kubeadm-cert secret 中 用于加密 control-plane 证书的key
          --config string                         kubeadm 配置文件的路径.
          --cri-socket string                    CRI socket 文件路径,如果为空 kubeadm 将自动发现相关的socket文件; 只有当机器中存在多个 CRI  socket 或者 存在非标准 CRI socket 时才指定.
          --dry-run                              测试,并不真正执行;输出运行后的结果.
          --feature-gates string                 指定启用哪些额外的feature 使用 key=value 对的形式。
      	  --help  -h                             帮助文档
          --ignore-preflight-errors strings       忽略前置检查错误,被忽略的错误将被显示为警告. 例子: 'IsPrivilegedUser,Swap'. Value 'all' ignores errors from all checks.
          --image-repository string              选择拉取 control plane images 的镜像repo (default "k8s.gcr.io")
          --kubernetes-version string            选择K8S版本. (default "stable-1")
          --node-name string                     指定node的名称,默认使用 node 的 hostname.
          --pod-network-cidr string              指定 pod 的网络, control plane 会自动将 网络发布到其他节点的node,让其上启动的容器使用此网络
          --service-cidr string                  指定service 的IP 范围. (default "10.96.0.0/12")
          --service-dns-domain string            指定 service 的 dns 后缀, e.g. "myorg.internal". (default "cluster.local")
          --skip-certificate-key-print            不打印 control-plane 用于加密证书的key.
          --skip-phases strings                  跳过指定的阶段(phase)
          --skip-token-print                     不打印 kubeadm init 生成的 default bootstrap token 
          --token string                         指定 node 和control plane 之间,简历双向认证的token ,格式为 [a-z0-9]{6}\.[a-z0-9]{16} - e.g. abcdef.0123456789abcdef
          --token-ttl duration                   token 自动删除的时间间隔。 (e.g. 1s, 2m, 3h). 如果设置为 '0', token 永不过期 (default 24h0m0s)
          --upload-certs                         上传 control-plane 证书到 kubeadm-certs Secret.
    

    ps:如果想要回退,可执行以下指令

    kubeadm reset -f
    rm -rf /etc/kubernetes
    rm -rf /var/lib/etcd/
    rm -rf $HOME/.kube
    
  4. 查看状态:systemctl status kubelet

    在这里插入图片描述

    ps:如果报错,可以使用journalctl -xefu kubelet看下哪里的问题

  5. 设置.kube/config(只在master执行)

    1)mkdir -p $HOME/.kube

    2)cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

    3)chown ( i d − u ) : (id -u): (idu):(id -g) $HOME/.kube/config

  6. 安装网络插件calico(只在master执行)

    1)切换目录:cd /opt/k8s

    2)下载:curl https://docs.projectcalico.org/archive/v3.19/manifests/calico.yaml -O

    3)修改内容,其中value为上一步的–pod-network-cidr的ip:vi /opt/k8s/calico.yaml

    - name: CALICO_IPV4POOL_CIDR
    value: "192.169.0.0/16"
    

    4)查看需要的镜像:cat calico.yaml | grep image

在这里插入图片描述

5)编辑镜像下载文件:vi /opt/calicoImages.sh

#!/bin/bash

images=(
docker.io/calico/cni:v3.19.4
docker.io/calico/pod2daemon-flexvol:v3.19.4
docker.io/calico/node:v3.19.4
docker.io/calico/kube-controllers:v3.19.4
)
for imageName in ${images[@]} ; do
docker pull $imageName
done

6)赋权:chmod +x /opt/calicoImages.sh

7)执行:/opt/calicoImages.sh

8)部署calico(只在master执行):kubectl apply -f calico.yaml

9)此时查看master的状态:kubectl get pods -A

在这里插入图片描述

10)kubectl get nodes

在这里插入图片描述

  1. 加入node节点

    1)执行:kubeadm join master:6443 --token x3mk8z.fzaqp9swqxl2o6r3 --discovery-token-ca-cert-hash sha256:f4ced0c25b14a796e02b3300b011f7ec8e120c01e95595d78b6d1b38b8805dfc

    2)令牌有效期24小时,可以在master节点生成新令牌命令: kubeadm token create --print-join-command

    3)查看master的状态:kubectl get pods -A

    在这里插入图片描述

    4)kubectl get nodes

    在这里插入图片描述

    5)拷贝主节点文件使node节点可以执行kubectl命令:scp -r H O M E / . k u b e w o r k e r 1 : HOME/.kube worker1: HOME/.kubeworker1:HOME

    ​ ps:拷贝完,自行在node节点测试kubectl命令

    6)将主节点中的/etc/kubernetes/admin.conf文件拷贝到从node节点相同目录下:scp /etc/kubernetes/admin.conf worker1:/etc/kubernetes

    7)导入环境

    echo export KUBECONFIG=/etc/kubernetes/admin.conf >> ~/.bash_profile
    source ~/.bash_profile
    

四、安装部署dashboard

ps:只在master执行

  1. dashboard和kubernetes的版本对应关系,参考:https://github.com/kubernetes/dashboard/blob/v2.5.1/go.mod

  2. 下载镜像

    1)切换目录:cd /opt/k8s

    2)下载:curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O

    3)创建资源:kubectl apply -f recommended.yaml

    ps:会下载kubernetesui/dashboard:v2.5.1、kubernetesui/metrics-scraper:v1.0.7两个镜像。也可以直接先下载镜像,避免等待

  3. 定时刷新查看进度:watch -n 3 kubectl get pods -A

    在这里插入图片描述

  4. 设置访问端口:kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

    将type: ClusterIP改为:type: NodePort
    添加 nodePort: 32414
    

在这里插入图片描述

  1. 查看端口命令:kubectl get svc -A | grep kubernetes-dashboard

    在这里插入图片描述

  2. 访问dashborad页面:https://192.168.248.11:32414,如下所示

    在这里插入图片描述

  3. 获取普通用户token

    1)获取列表: kubectl get secrets -n kubernetes-dashboard

    2)获取密钥:kubectl describe secrets default-token-fjzh6 -n kubernetes-dashboard
    在这里插入图片描述

  4. 获取admin用户token

    1)创建访问账号:vi /opt/dash.yaml

    创建用户–》申明角色–》用户和角色绑定

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kubernetes-dashboard
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: admin-user
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: admin-user
      namespace: kubernetes-dashboard
    

    2)应用: kubectl apply -f /opt/dash.yaml

    3)获取访问令牌: kubectl describe secrets admin-user-token-d8f7x -n kubernetes-dashboard
    在这里插入图片描述

  5. 将获取的token填入页面登录即可

    在这里插入图片描述

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

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

相关文章

JavaSE入门---数据类型与变量

文章目录 数据类型基本数据类型引用数据类型 常量变量变量类型类型转换自动类型转换(隐式)强制类型转换(显式) 类型提升 字符串类型 数据类型 在Java中,数据类型基本分为俩类:基本数据类型和引用数据类型。…

代理IP可以用于哪些实际场景?遇到问题如何解决

代理IP的应用场景非常广泛,可以在不同领域提供许多有用的功能。以下是关于代理IP应用场景的详细扩充,包括每个场景的优势和应用建议,以及在使用代理IP时可能遇到的问题和应对方法。 1.价格监控: 商业竞争很大程度上是价格竞争。在…

解决Maven依赖下载缓慢的问题(亲测管用)

解决Maven依赖下载缓慢 众所周知,欲练神功,必先自宫。最好的方式就是不用镜像,自己在本地下载一个稳定版本的Maven,以后每次用的时候直接在IDEA里面一导入就可以。(为了保险,在以下的步骤里配置了aliyun镜像…

高防CDN怎样保护网站安全的

在当今数字化时代,互联网安全问题日益严重。网络攻击和数据泄露威胁着个人隐私、企业机密以及关键基础设施的安全。在应对这些挑战方面,高防CDN(内容分发网络)崭露头角,它不仅提高了性能,还加强了网络安全。…

算法学习——贪心算法

目录 一,柠檬水找零 1.题目 2.题目接口 3.题目解题思路 二,将数组减半的最小操作数 1.题目 2.题目接口 3.解题思路及代码 三,摆动序列 1.题目 2.题目接口 3.解题代码及思路 一,柠檬水找零 1.题目 在柠檬水摊上&#xf…

Linux文件系统 struct file 结构体解析

文章目录 一、open系统调用1.1 简介1.2 files_struct1.2.1 简介1.2.2 init_files1.2.2 CLONE_FILES 1.3 源码分析1.3.1 get_unused_fd_flags1.3.2 do_filp_open1.3.3 fd_install 二、struct file简介三、其他参考资料 一、open系统调用 1.1 简介 NAMEopen, creat - open and …

手撸java对象拷贝工具类(赶快来试试)

今天心血来潮想自己手撸一个对象拷贝工具学习学习,感觉很不错,使用纯原生java,不依赖任何工具类,健壮性就不优化了。技术主要用到了反射和stream,赶快来试试,炒鸡好用! /*** 对象拷贝注入* 参数…

加权平均、EMD、小波等方法去噪效果对比

加权平均、EMD、小波等方法去噪效果对比 代码 整体代码如下 %% clear all; clc;load(data_filter120Hz.mat); %可自己生成随机噪声 fs1000;%采样频率是1000Hz %% %生成正弦波信号 tlinspace(0, length(data)/fs-1/fs, length(data)); y1 15*sin(2*pi* 2.8 *t);%生成频率为2.…

如何选择一款适合的工单管理系统?“的修”工单系统有什么优势?

在如今快节奏的单位环境中,一个高效、便捷的工单管理系统对于单位的重要性不言而喻。面对琳琅满目的工单管理系统,单位该如何选择最合适的一款呢?本文将详细评测“的修”工单管理系统,带您了解它的强大功能和优势,帮您…

游戏缺少dll文件用什么修复?dll多种修复方法指南

在玩游戏时,有时候可能会遇到游戏缺少dll文件的问题。dll文件是动态链接库的缩写,它包含了一些函数和资源,游戏运行需要依赖这些文件。如果缺少了某个dll文件,游戏就可能无法正常运行。那么游戏缺少dll文件用什么修复?…

C语言---预处理详解

1.预定义符号 在C语言中有一些内置的预定义符号 __FILE__ __LINE__ __DATE__ __TIME__ __STDC__//进行编译的源文件 //文件当前的行号 //文件被编译的日期 //文件被编译的时间 //如果编译器遵循ANSI C,其值为1,否则未定义 编译器在__STDC__报错,说明,v…

基于IPSec VPN隧道技术的国密加密网关保障电力工控数据安全

IPSec VPN(Internet Protocol Security Virtual Private Network)隧道技术为电力工控系统提供了重要的数据安全传输手段。该技术能实现身份鉴别和数据加密传输,为系统的防护工作增添了有力的支持。 电力工控系统对数据传输的可靠性要求较高。…

String的intern()方法详解

文章目录 前言一、new String()创建了几个对象?二、Stting anew String("ab")new String("c")创建了几个对象三、String的intern()方法四:面试题五:总结 前言 在开发过程中很多朋友,由…

vue.config.js配置proxy代理产生404错误的原因

在使用vue做开发时,请求api接口时为了解决跨域问题,一般会设置proxy代理, 但有时候会莫名其妙的出现404错误,这里总结一下vue设置proxy代理产生404错误的几种原因: 原因1:没有注意vue proxy代理优先级的规…

SQL Server向表中插入数据

SQL Server向表中插入数据 切换到对应的数据库 use DBTEST插入数据 方式1 insert into 表名(列名1,列名2) values(数据1,数据2)注意: 列名就算是字符类型也不用加引号,数据如果对应的字段是字符串类型&…

48.排列问题求解

思路分析&#xff1a;通过为每一队分配一个id&#xff0c;join条件要求t1.num < t2.num实现相同两队只比一次 代码实现&#xff1a; with t as (SELECT team_name,caseteam_nameWHEN 勇士 then 1WHEN 湖人 then 2WHEN 灰熊 then 3else 4end numFROM team )SELECT t1.team_…

零经验想跳槽转行网络安全,需要准备什么?

最近在后台看到很多私信都是有关转行网络安全的问题&#xff0c;目前咨询最多的都是&#xff1a;觉得现在的工作没有发展空间&#xff0c;替代性强&#xff0c;工资低&#xff0c;想跳槽转行网络安全。其中&#xff0c;他们主要关心的是&#xff1a;没有经验怎么学习&#xff1…

模糊测试面面观 | 电动汽车充电桩安全漏洞案例分享

在上一期我们讲了针对车载以太网DOIP协议详细阐释在实际过程的漏洞发掘过程&#xff0c;本期我们将继续延展&#xff0c;探讨电动车充电系统的安全漏洞。开源网安在基于 GB/T 27930-2015通信标准的电动汽车充电桩中&#xff0c;采用渗透测试、模糊测试和数据流分析等多种安全漏…

易天光通信推出100G BIDI ER光模块最新解决方案

随着数字信息时代的快速发展&#xff0c;网络通信技术的迅猛进步成为推动科技创新和产业升级的重要引擎之一。作为光通信行业的新秀&#xff0c;近期易天光通信推出了全新的100G BIDI ER1 Lite光模块和100G BIDI LR1 Lite光模块&#xff0c;助力崭新的未来网络建设。 易天光通…

45.复购率问题求解

思路分析&#xff1a; &#xff08;1&#xff09;近xx天&#xff0c;最大日期肯定就是最新的一天&#xff0c;故先用max(order_date) over() today计算当天日期 &#xff08;2&#xff09;过滤出最近90天的订单并且按照user_id,product_id分组求购买次数&#xff1b; &#xff…