kubeadm引导欧拉系统高可用的K8S1.28.X

news2024/11/15 20:42:10

文章目录

    • 一. 核心组件架构
    • 二. 有状态与无状态应用
    • 三. 资源对象
      • 3.1 规约与状态
      • 3.2 资源的分类-元数据,集群,命名空间
        • 3.2.1 元数据
        • 3.2.2 集群资源
      • 3.3 命名空间级
        • 3.3.1 pod
        • 3.3.2 pod-副本集
        • 3.3.3 pod-控制器
    • 四. Kubeadm安装k8s集群
      • 4.1 初始操作
      • 4.2 ~~所有节点安装Docker(不建议)~~
      • 4.2 contained运行时容器安装
      • 4.3 所有节点安装kubernates组件
      • 4.4 安装高可用组件
      • 4.5 集群初始化
      • 4.5.2 安装helm
      • 4.5.3 离线安装Calico
      • 4.5.4 Metrics Server
      • 4.5.5 Kuboard
      • 4.5.6 集群验证


K8s图

# containerd常用命令
ctr c ls # ctr containers list 查看containerd容器
ctr i ls # ctr images list 查看containerd镜像
ctr ns ls # ctr namespace list 查看containerd命名空间

ctr c rm <容器ID> # 删除容器
ctr i rm <镜像ID> # 删除镜像

# kubectl常用命令
kubectl get ns # 查看k8s命名空间
kubectl get nodes # 查看k8s集群节点
kubectl get pods -n <namespace> # 查看某命名空间下所有pod
kubectl get pods -n <namespace> -o wide # 查看pod的详细内容

kubectl logs <pod> -n <namespace> # 查看某容器日志记录
kubectl describe <pod> -n <namespace> #  Kubernetes 资源(如 pod、节点和部署)的详细信息

kubectl delete pod <pod> -n <namespace> # 删除容器
kubectl delete namespaces <namespace> # 删除命名空间

kubectl taint nodes k8s-node2 check:NoExecute- # 去除污点
kubectl taint nodes k8s-node2 check=yuanzhang:NoExecute # 设置污点

一. 核心组件架构

在这里插入图片描述
在这里插入图片描述


二. 有状态与无状态应用

简单理解: 有数据存储的中间件是有状态应用,反之则是无状态.

无状态有状态
缺点不能存储数据,需要额外的数据服务支撑集群环境下需要实现主从、数据同步、备份、水平扩容复杂
优点对客户端透明,无依赖关系,可以高效实现扩容、迁移可以独立存储数据,实现数据管理

三. 资源对象

Kubernetes中的所有内容都被抽象为"资源",如Pod、service.Node等都是资源。“对象"就是"资源"的实例,是持久化的实体。如某个具体的Pod、某个具体的Node。Kubernetes使用这些实体去表示整个集群的状态。

各组件配置API官方文档

3.1 规约与状态

spec”是“规约"、“规格”的意思,spec是必需的,它描述了对象的期望状态(Desired state) ——希望对象所具有的特征。当创建Kubernetes对象时,必须提供对象的规约,用来描述该对象的期望状态,以及关于对象的一些基本信息(例如名称)。

status 表示对象的实际状态,该属性由k8s自己维护,k8s会通过一系列的控制器对对应对象进行管理,让对象尽可能的让实际状态与期望状态重合。

3.2 资源的分类-元数据,集群,命名空间

大致分为三类: 元数据,集群,命名空间

在这里插入图片描述

3.2.1 元数据

一句话概括:对Kubernetes的所有资源实施了弹性约束和全局约束,并对实例的创建规则进行了描述。

Horizontal Pod Autoscaler (HPA):
在这里插入图片描述
PodTemplate
在这里插入图片描述
LimitRange
在这里插入图片描述

3.2.2 集群资源

Namespace
在这里插入图片描述
Node
在这里插入图片描述
ClusterRole
在这里插入图片描述
ClusterRoleBinding

不能绑定到元数据上的资源
在这里插入图片描述

3.3 命名空间级

3.3.1 pod

一句话概括: Pod是一种将原先运行时环境资源提升至更高级管理的概念,它方便了容器间的数据共享,并让各自容器能够专注于各自的任务。

为什么我们需要Pod?当我们仅有运行时环境时,我们希望多个高度耦合的Java项目能够共享同一个数据卷,以实现数据共享。然而,在一对多的管理情况下,这变得极其不方便。

建议: 在一个Pod中关联了紧耦合的容器。通常情况下,一个Pod只包含一个容器。
在这里插入图片描述

在这里插入图片描述

3.3.2 pod-副本集

扩缩容的基础实例
在这里插入图片描述

3.3.3 pod-控制器

管理pod的控制器有很多,负责pod的无状态,有状态,定时任务,守护进程等的管理

无状态服务-扩缩容控制器 ReplicaSet(RS)
在这里插入图片描述
无状态服务-Deployment 针对RS的扩展,具备额外的滚动升级,回滚暂停恢复等
在这里插入图片描述
有状态服务-StatefulSet 专门针对于有状态服务进行部署的一个控制器

一句话总结: 保证无缝切换数据不丢失,同时确保项目能够访问新的容器地址,并保持集群主从关系的稳定,就像Redis哈希槽分区一样,确保分区不会混乱。

  • 稳定的持久化存储: 即 Pod 重新调度后还是能访问到相同的持久化数据,基于 PVC 来实现
  • 稳定的网络标志: 稳定的网络标志,即 Pod 重新调度后其 PodName 和 HostName 不变,基于 Headless Service(即没有 Cluster IP 的 Service)来实现
  • 有序部署,有序扩展: 有序部署,有序扩展,即 Pod 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从 0到 N-1,在下一个Pod 运行之前所有之前的 Pod 必须都是 Running 和 Ready 状态),基于 init containers 来实现
  • 有序收缩,有序删除: 有序收缩,有序删除(即从 N-1 到 0)
    在这里插入图片描述
Headless Service用于定义网络标志(DNS domain)DNS:域名服务将域名与 ip 绑定映射关系服务名 => 访问路径(域名) => ip
volumeClaimTemplate用于创建持久化模板,类似docker数据卷
DaemonSetDaemonSet 保证在每个 Node 上都运行一个容器副本,常用来部署一些集群的日志、监控或者其他系统管理应用。
job一次定时任务
cronjob周期定时任务

服务发现

servicePod 不能直接提供给外网访问,而是应该使用 service。Service 就是把 Pod 暴露出来提供服务
IngressIngress 可以提供外网访问 Service 的能力。可以把某个请求地址映射、路由到特定的 service。ingress 需要配合 ingress controller 一起使用才能发挥作用,ingress 只是相当于路由规则的集合而已,真正实现路由功能的,是 Ingress Controller,ingress controller 和其它 k8s 组件一样,也是在 Pod 中运行。

在这里插入图片描述
配置与存储

  • Volume :数据卷,共享 Pod 中容器使用的数据。用来放持久化的数据,比如数据库数据。
  • CSI: Container Storage Interface 是由来自 Kubernetes、Mesos、Docker 等社区成员联合制定的一个行业标准接口规范,旨在将任意存储系统暴露给容器化应用程序。CSI 规范定义了存储提供商实现 CSI 兼容的 Volume Plugin 的最小操作集和部署建议。CSI 规范的主要焦点是声明 Volume Plugin 必须实现的接口。
  • ConfigMap: 用来放配置,与 Secret 是类似的,只是 ConfigMap 放的是明文的数据,Secret 是密文存放。
  • Secret : Secret 解决了密码、token、密钥等敏感数据的配置问题,而不需要把这些敏感数据暴露到镜像或者 Pod Spec 中。Secret 可以以 Volume 或者环境变量的方式使用。
    Secret 有三种类型:
    Service Account:用来访问 Kubernetes API,由 Kubernetes 自动创建,并且会自动挂载到 Pod 的 /run/secrets/kubernetes.io/serviceaccount 目录中;
    Opaque:base64 编码格式的 Secret,用来存储密码、密钥等;
    kubernetes.io/dockerconfigjson:用来存储私有 docker registry 的认证信息。
  • DownwardAPI: downwardAPI 这个模式和其他模式不一样的地方在于它不是为了存放容器的数据也不是用来进行容器和宿主机的数据交换的,而是让 pod 里的容器能够直接获取到这个 pod 对象本身的一些信息。
    downwardAPI 提供了两种方式用于将 pod 的信息注入到容器内部:
    环境变量:用于单个变量,可以将 pod 信息和容器信息直接注入容器内部
    volume 挂载:将 pod 信息生成为文件,直接挂载到容器内部中去

role/rolebinding
在这里插入图片描述
在这里插入图片描述

四. Kubeadm安装k8s集群

kubectl debug #设置临时容器
sidecar # 本地文件日志filebeat收集和业务容器顺序定义
volumn # 更改目录权限,1.18之后不建议修改权限,文件数量大可能起不来容器
configMap和Secret #1.18后不支持运行时修改,避免热更新出错,导致生产事故

至少有 master,node节点服务器
操作系统: Centos7
K8S: 1.24+ 运行时环境不支持docker
运行时环境: Contanied,CRI-O

4.1 初始操作

在这里插入图片描述
https://github.com/kubernetes/kubernetes/issues/53533

主机名ip
k8s-master1192.168.0.101
k8s-master2192.168.0.102
k8s-master3192.168.0.103
k8s-node1192.168.0.104
k8s-node2192.168.0.105
k8s-node3192.168.0.106
k8s-loadblancer192.168.0.107

所有节点配置dns映射文件

vi /etc/hosts
192.168.0.101 k8s-master01
192.168.0.102 k8s-master02
192.168.0.103 k8s-master03
192.168.0.104 k8s-node01
192.168.0.105 k8s-node02 
192.168.0.106 k8s-node03
192.168.0.107 k8s-loadblancer

systemctl disable --now firewalld
systemctl disable --now dnsmasg
#systemctl disable --now NewworkManager #Centos8无需关闭
setenforce 0
#=========start ========
vim /etc/sysconfig/selinux
# 修改selinux参数
SELINUX=disabled
#=========end =========

 # swap启用后,在使用磁盘空间和内存交换数据时,性能表现会较差,会减慢程序执行的速度
 # kubelet 在 1.8 版本以后强制要求 swap 必须关闭
swapoff -a && sysctl -w vm.swappiness=0

vim /etc/sysctl.conf
#======start==========
net.ipv4.ip_local_port_range = 1024 65535
#======end==========
sysctl -p

#===== 注释swap静态文件读取,有些云服务器没有====
vi /etc/fstab
# /swap.img     none    swap    sw      0       0 

# 安装同步时间
yum install ntpdate -y
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' > /etc/timezone
ntpdate ntp1.aliyun.com

#加入到crontab
crontab -e
# =========================
*/5 * * * * ntpdate ntp1.aliyun.com
# =========================

# 配置网络
# 配置iptables参数,使得流经网桥的流量也经过iptables/netfilter防火墙 
# 设置必需的 sysctl 参数,这些参数在重新启动后仍然存在。
cat >> /etc/sysctl.d/k8s.conf << EOF
#####################################
#关闭ipv6协议
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
net.ipv6.conf.all.disable_ipv6=1 
#开启网桥模式,可将网桥的流量传递给iptables链 
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
#######################################
EOF

sysctl --system # 生效

Master01节点免密钥登录其他节点,安装过程中生成配置文件和证书均在 Master01上操作,
集群管理也在 Master01 上操作,阿里云或者 AWS 上需要单独一台kubectl服务器。密钥配置如下:
只在主节点进行

ssh-keygen -t rsa

for i in k8s-master01 k8s-master02 k8s-master03 k8s-node01 k8s-node02 k8s-node03;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

所有节点安装负载均衡配置:

yum install ipvsadm ipset sysstat conntrack libseccomp

modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack # nf_connectrack_ipv4

# 设置开机自启动
vi /etc/modules-load.d/ipvs.conf
# ==========================
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack #nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
# ==========================

systemctl enable --now systemd-modules-load.service
# 检查是否加载
lsmod | grep -e ip_vs -e nf_conntrack

4.2 所有节点安装Docker(不建议)

需要说明的是k8s 1.24+以停止维护docker,需要额外安装docker-ce符合k8s容器接口标准。或者仅安装containerd容器 docker底层containerd。 之前k8s依赖顶层docker,docker操作containerd。但是docker不符合cri标准,被k8s踢出局了。直接对接底层contained。然后可以用containerd或者cri-o等,cri-o和docker一个级别,但是符合cri标准。
在这里插入图片描述

所有节点安装
查阅K8S适配容器

本博主采用欧拉系统,华为云HCE,以及欧拉操作系统开放源自基金会对于yum/dnf源,官方源都有问题。。最后看了一篇csdn成功了换源,如下

# 使用华为云服务Yum安装软件的时候提示错误:
# Error: Failed to download metadata for repo ‘epel’: Cannot download repomd.xml
https://blog.csdn.net/qq_58551342/article/details/137334183
https://cloud.tencent.com/developer/article/2383890

centos7,8系统

# 配置docker源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
yum clean all
# 重新构建缓存索引
yum makecache

# 查看可用docker版本
yum list docker-ce.x86_64 --showduplicates | sort -r

# 安装最新版本的 Docker Engine 和 containerd,或者进入下一步安装特定版本:
yum install docker-ce docker-ce-cli containerd.io -y


systemctl enable --now docker

4.2 contained运行时容器安装

# 配置软件源
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
# 修改安装源为国内地址
sed -i 's#https://download.docker.com#https://mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
# openEuler 的使用方式近似 CentOS,因此,修改软件源的配置,使用 centos 7 的软件源
sed -i 's#$releasever#7#g' /etc/yum.repos.d/docker-ce.repo

yum clean all
yum makecache

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# 应用 sysctl 参数而无需重新启动
sudo sysctl --system

# 移除之前安装的
remove docker docker-engine docker.io containerd runc

yum install containerd -y

在这里插入图片描述
修改配置,符合k8s标准

# 生成默认配置
mkdir -p /etc/containerd
# 生成默认配置文件并写入到 config.toml 中
containerd config default | sudo tee /etc/containerd/config.toml

# 配置containerd 
vim /etc/containerd/config.toml
#==========start============
[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = "/etc/containerd/certs.d"
  
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true	# false 修改为 true
    
[plugins."io.containerd.grpc.v1.cri"]
  ...
  # sandbox_image = "k8s.gcr.io/pause:3.6" crictl images list | grep pause
  sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.9"	#这里一定要注意,要根据下载到本地 pause镜像的版本来进行修改,否则初始化会过不去。
#==========end============

# 创建指定配置目录
mkdir /etc/containerd/certs.d/docker.io -pv
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://xxxxxxxx.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF

systemctl daemon-reload
systemctl enable --now containerd

在这里插入图片描述

4.3 所有节点安装kubernates组件

所有节点安装
欧拉操作系统,参考如下

# 欧拉操作系统
https://docs.openeuler.org/zh/docs/20.03_LTS_SP1/docs/thirdparty_migration/k8sinstall.html
#添加 kubernetes 仓库 欧拉不执行
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
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
EOF
yum clean all
yum makecache
yum list kubeadm.x86_64 --showduplicates | sort -r
#yum install -y kubelet-1.18.20 kubeadm-1.18.20 kubectl-1.18.20 kubernetes-cni-1.18.20
# 安装kubeadm会把 kubelet,kubectl cni都装上
yum install -y kubeadm-1.28.2-0
# 设置Kubelet开机自启动
systemctl daemon-reload
systemctl enable --now kubelet

4.4 安装高可用组件

在这里插入图片描述

负载均衡节点或者所有master节点安装

使用Keepalived和HAproxy创建高可用集群

yum install keepalived haproxy -y
vim /etc/haproxy/haproxy.cfg
#============start=============
# 由于 lb1 和 lb2 上安装了 Keepalived 和 HAproxy,
# 如果其中一个节点故障,虚拟 IP 地址(即浮动 IP 地址)将自动与另一个节点关联,
# 使集群仍然可以正常运行,从而实现高可用。
global
    log /dev/log  local0 warning
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

   stats socket /var/lib/haproxy/stats
   
defaults
  log global
  option  httplog
  option  dontlognull
        timeout connect 5000
        timeout client 50000
        timeout server 50000

frontend kube-apiserver
  bind *:6444
  mode tcp
  option tcplog
  default_backend kube-apiserver

backend kube-apiserver
    mode tcp
    option tcplog
    option tcp-check
    balance roundrobin
    default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
    # 请注意 server 字段。请记住 6443 是 apiserver 端口, 代理到的master节点
    server kube-apiserver-1 192.168.0.101:6443 check # Replace the IP address with your own.
    server kube-apiserver-2 192.168.0.102:6443 check # Replace the IP address with your own.
    server kube-apiserver-3 192.168.0.103:6443 check # Replace the IP address with your own.
#============end============
systemctl restart haproxy
systemctl enable --now haproxy

vim /etc/keepalived/keepalived.conf
#============start==========
global_defs {
  notification_email {

  }

  router_id LVS_DEVEL
  vrrp_skip_check_adv_addr
  vrrp_garp_interval 0
  vrrp_gna_interval 0
}
## 检测haproxy程序脚本
vrrp_script chk_haproxy {
  script "killall -0 haproxy"
  interval 2
  weight 2
}

vrrp_instance haproxy-vip {

  state BACKUP
  priority 100
  # 对于 interface 字段,您必须提供自己的网卡信息。您可以在机器上运行 ifconfig 以获取该值。
  interface eth0                       # Network card
  virtual_router_id 60
  advert_int 1

  authentication {
    auth_type PASS
    auth_pass 1111
  }
# 为 unicast_src_ip 提供的 IP 地址是您当前机器的 IP 地址,公网ip
  unicast_src_ip 192.168.0.101     # The IP address of this machine
# 对于也安装了 HAproxy 和 Keepalived 进行负载均衡的其他机器,必须在字段 unicast_peer 中输入其 IP 地址。
  unicast_peer { # 公网ip
    # 192.168.0.102                      # The IP address of peer machines
  }

  virtual_ipaddress {  # 公网ip
    # 192.168.0.10/24                  # The VIP address
  }

  track_script {
    chk_haproxy
  }
}
#===========end===========
# 启动
systemctl restart keepalived
systemctl enable --now keepalived

4.5 集群初始化

利用 kubeadm 创建高可用集群
只在一个master节点初始化

# 节点初始化  均为私网地址,后期通过
# --control-plane-endpoint 负载均衡节点,其他node节点以此为准,一般为公网ip
# --kubernetes-version 初始化的k8s版本要和kubeadm一致
# --image-repository 镜像源
# --pod-network-cidr配置pod网络段,calico需要和其一致 子网划分套用
# --service-cidr 直接套用
# -- apiserver-advertise 当前master节点,内网ip
kubeadm init --control-plane-endpoint "192.168.0.101:6444" \
--upload-certs \
--kubernetes-version=v1.28.2 \
--image-repository=registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--apiserver-advertise-address=192.168.0.101 \
--apiserver-bind-port=6443 
# 初始化失败执行以下内容
kubeadm reset

# 查看组件状态
kubectl get pods -n kube-system

在这里插入图片描述

# 查看token过期时间
kubeadm token list
# 假如token过期
# 生成node节点token
kubeadm token create --print-join-command
# 生成master的
kubeadm init phase upload-certs --upload-certs
#master节点
kubeadm join 197.168.0.101:80 --token 6btwxm.ln24af24fj4zna76 \
        --discovery-token-ca-cert-hash sha256:898981bce15f5f4f8654c7a8f8ade7f2c5ea626193f90add6b208df6972362a0 \
        --control-plane --certificate-key 104fc0e4d56387568a5962c1a8cbb1f42c1395b0704c10fcfd8b753369bfd5fb

#node节点
kubeadm join 197.168.0.101:80 --token 6btwxm.ln24af24fj4zna76 \
        --discovery-token-ca-cert-hash sha256:898981bce15f5f4f8654c7a8f8ade7f2c5ea626193f90add6b208df6972362a0 

4.5.2 安装helm

Helm 图表是一种为 Kubernetes(类似于操作系统或操作系统)打包应用程序的方法。ArgoCD 等工具也使用 Helm 来管理集群中的应用程序,负责安装、升级(如果需要时回滚)等。

helm下载

wget https://get.helm.sh/helm-v3.15.1-linux-amd64.tar.gz
tar -zxvf helm-v3.15.1-linux-amd64.tar.gz \
&& mv linux-amd64/helm /usr/local/bin/ \
&& rm -rf linux-amd64

4.5.3 离线安装Calico

官方地址版本对应
安装资源包

本节参考自 离线安装calico

在这里插入图片描述
解压calico离线包并将所需文件上传至服务器
首先将calico.yaml文件上传至服务器
然后使用cat calico.yaml |grep image:命令查看calico所需的镜像包。

cat calico.yaml |grep image:

在这里插入图片描述
这里显示安装calico需要三个镜像,去解压的离线包imgaes文件夹中找到对应的三个离线镜像包文件,这里对应的分别是calico-cni.tar,calico-kube-controllers.tar和calico-node.tar三个离线包,将这三个离线镜像上传至服务器。
可以使用ctr namespace ls命令查看containerd的命名空间。k8s的命名空间为k8s.io
在这里插入图片描述

离线镜像导入containerd的k8s命名空间中,使用containerd的导入镜像命令将calico的离线镜像包导入到k8s的命名空间中

ctr -n k8s.io images import calico-cni.tar
ctr -n k8s.io images import calico-kube-controllers.tar
ctr -n k8s.io images import calico-node.tar

用之前上传的calico.yaml文件安装calico,calico.yaml可根据自己的实际需要修改。

vi calico.yaml
#=========start=======
#修改calico.yaml里的pod网段。 和kubadm init时候 pod-network-cidr参数保持一致
#把calico.yaml里pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段,
#直接用vim编辑打开此文件查找192,按如下标记进行修改:
# no effect. This should fall within `--cluster-cidr`.
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
  value: "true"
#========end ==========
kubectl apply -f calico.yaml
kubectl get pods -n kube-system

在这里插入图片描述

4.5.4 Metrics Server

对于 Kubernetes,Metrics API 提供了一组基本的指标,以支持自动伸缩和类似的用例。 该 API 提供有关节点和 Pod 的资源使用情况的信息, 包括 CPU 和内存的指标。

metrics-server 会请求每台节点的 kubelet 接口来获取监控数据,接口通过 HTTPS 暴露,但 Kubernetes节点的 kubelet 使用的是自签证书,若 metrics-server 直接请求 kubelet接口,将产生证书校验失败的错误,因此需要在 components.yaml 文件中加上 --kubelet-insecure-tls启动参数。

且由于 metrics-server 官方镜像仓库存储在 k8s.gcr.io ,国内可能无法直接拉取,您可以自行同步到 CCR或使用已同步的镜像 ccr.ccs.tencentyun.com/mirrors/metrics-server:v0.7.1

metrics server

# 下载 yaml 部署文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.7.1/components.yaml
# containerd容器下载
ctr image pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1

vi components.yaml
#=========start=========
# 修改 metrics-server 启动参数
containers:
- args:
  - --cert-dir=/tmp
  - --secure-port=10250
  - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
  - --kubelet-use-node-status-port
  - --metric-resolution=15s
  - --kubelet-insecure-tls # 加上该启动参数
  image: registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1 # 国内集群,请替换成这个镜像
#=========end=========
kubectl apply -f components.yaml
kubectl taint nodes kube-system check:NoExecute- # 去除污点
kubectl get pod -n kube-system | grep metrics-server

4.5.5 Kuboard

Kuboard github

#kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
wget https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
vi kuboard-v3-swr.yaml
#========start=======
#KUBOARD_SERVER_NODE_PORT: '30080'
KUBOARD_ENDPOINT: http://kuboard-v
#=======end========
kubectl apply -f kuboard-v3-swr.yaml

watch kubectl get pods -n kuboard

#访问 Kuboard
#在浏览器中打开链接 http://your-node-ip-address:30080

#输入初始用户名和密码,并登录

#用户名: admin
#密码: Kuboard123

# 卸载
kubectl delete -f kuboard-v3-swr.yaml
rm -rf /usr/share/kuboard

在这里插入图片描述

4.5.6 集群验证

kubectl get po --all-namespaces -owide

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

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

相关文章

使用虚拟卡注册亚马逊店铺亲测墨西哥、北美都可以亲测~~

这几天测试了使用虚拟信用卡注册墨西哥与北美站的店铺&#xff0c;成功下店&#xff0c;总有人说会被扫&#xff0c;其实去年12月费就有使用卡注册店铺&#xff0c;至今还是好的 当然也不是完全都没有可能店铺不会挂&#xff0c;挂的时候提供账单就好了&#xff0c;直接找客服…

设计模式——工厂三兄弟之简单工厂

1.业务需求 ​ 大家好&#xff0c;我是菠菜。在介绍这期简单工厂设计模式前&#xff0c;我们先来看看这样的需求&#xff1a;制作一个简单的计算器&#xff0c;能够实现控制台输入俩个数以及运算符完成运算。 2.初步实现 实现第一版思路&#xff1a; ​ 创建计算器类&…

k8s污点及容忍度+实践

k8s污点及容忍度实践 前言 一、标签、注解和污点1、如何查询污点及一个容器或者工作负载的标签注解a、通过describe命令查看一个节点的详细信息 2、标签查询修改 二、污点和容忍度容忍度&#xff08;Tolerations&#xff09;2、taint / label命令及解释 三、为应用程序设置干扰…

NameSilo + Cloudflare 给网站加个域名(附 NameSilo 购买域名优惠码)

网站做好了之后,下一步就是买域名 在国内买域名的话,还需要备案,个人名下备案好像是还有限制,我就去 NameSilo 上面买的 在买之前,对比过几家 比如: godaddy/namecheap/cloudflare 本来是倾向于在 godaddy 上面买的,因为它支持支付宝支付,但是在详细看的时候,发现如果购买一年…

腾讯云COS上传文件出现的问题

1、没有配置 ObjectMetadata 的文件长度 腾讯云COS上传文件出现数据损坏问题_no content length specified for stream data. strea-CSDN博客 2、 使用 FileInputStream使用完没有及时关闭导致报错 ClientAbortException: java.nio.channels.ClosedChannelException 添加…

AI Agent:自主性、反应性与交互性的融合,将颠覆软件行业

Agent来袭&#xff1a;AI如何变身软件界的超级英雄&#xff1f; ©作者|Zhongmei 来源|神州问学 前言 “AI Agent不仅会彻底改变计算机的使用方式&#xff0c;它还将颠覆软件行业&#xff0c;是一个对科技行业的冲击波&#xff0c;是一场自‘输入命令到点击图标’变革之后…

266 基于matlab的FCM+KFCM模糊C均值聚类分析算法

基于matlab的FCMKFCM模糊C均值聚类分析算法&#xff0c;输入分割对象&#xff0c;对分割对象进行参数设置&#xff0c;包括分割类别数&#xff0c;核参数。输出分割结果。具有GUI操作界面。程序已调通&#xff0c;可直接运行。 266 FCM KFCM 模糊C均值聚类 GUI - 小红书 (xiaoh…

站内信设计

参考文章&#xff1a;https://cloud.tencent.com/developer/article/1684449 b站站内信业务设计&#xff1a; 消息的类型分为&#xff1a; 1、系统消息 2、、点赞、回复等用户行为之间的消息(事件提醒) 3、用户之间的消息 系统消息 用一个用户消息表可以吗&#xff1f; 可…

主副坐标轴作图(即双坐标轴)

主副坐标轴显示&#xff1a; import numpy as np from matplotlib import pyplot as plt plt.rcParams[font.sans-serif][SimHei] plt.rcParams[axes.unicode_minus] False xnp.arange(0.1,10,0.01) data1np.exp(x) data2np.log(x) fig,ax1plt.subplots() #subplots一定要带s…

室内也可以用北斗定位?还能用RTK?

室内卫星顾名思义&#xff0c;就是在室内有遮挡环境中的卫星定位技术&#xff0c;众所周知&#xff0c;目前全球几大GNSS定位系统已经很完善&#xff0c;但是GNSS有个致命的弱点&#xff0c;就是地面如果有遮挡就没有信号&#xff0c;在这样的条件下&#xff0c;在室内定位场景…

YOLOv8+PyQt5农作物杂草检测系统完整资源集合(yolov8模型,从图像、视频和摄像头三种路径识别检测,包含登陆页面、注册页面和检测页面)

农作物杂草检测YOLOV8(https://mbd.pub/o/bread/mbd-ZpaTl5tv)_哔哩哔哩_bilibili 资源包含可视化的农作物杂草检测系统&#xff0c;基于最新的YOLOv8训练的农作物杂草检测模型&#xff0c;和基于PyQt5制作的可视化农作物杂草检测系统&#xff0c;包含登陆页面、注册页面和检测…

免费,Python蓝桥杯等级考试真题--第15级(含答案解析和代码)

Python蓝桥杯等级考试真题–第15级 一、 选择题 答案&#xff1a;B 答案&#xff1a;D 解析&#xff1a;集合的并集运算有两种方式&#xff0c;一种是使用“|”运算符进行操作&#xff0c;另一种是使用union()方法来实现&#xff0c;故答案为D。 答案&#xff1a;A 解析&…

STM32启动过程分析

Keil堆栈设置注意事项 一、启动模式 复位方式&#xff1a;上电复位、硬件复位、软件复位 从地址0x0000 0000处取出堆栈指针MSP的初始值&#xff0c;该值就是栈顶地址。从地址0x0000 0004处取出程序计数器指针PC的初始值&#xff0c;该值指向复位后执行的第一条指令。 说白了就…

2024年【危险化学品经营单位安全管理人员】考试报名及危险化学品经营单位安全管理人员找解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 危险化学品经营单位安全管理人员考试报名考前必练&#xff01;安全生产模拟考试一点通每个月更新危险化学品经营单位安全管理人员找解析题目及答案&#xff01;多做几遍&#xff0c;其实通过危险化学品经营单位安全管…

ArcGIS基本操作-常用的空间分析工具梳理

ArcGIS空间分析工具使用 如果我们在进行科研时需要将研究区地形地貌作为一项指标的话&#xff0c;将可能遇到坡度、坡向、地形起伏度、地表切割深度等因子计算&#xff0c;下面我向大家介绍如何利于ArcGIS软件的空间分析工具&#xff0c;基于高程数据&#xff0c;分析重庆市的…

聊聊如何感知项目引入哪些功能特性

前言 使用过springcloud全家桶朋友&#xff0c;应该知道springcloud涉及的组件很多&#xff0c;为了让开发者快速了解项目引入了springcloud哪些组件&#xff0c;springcloud引入了HasFeatures&#xff0c;配合Actuator&#xff0c;可以让开发者感知到项目引入的组件功能类型、…

深度解析Nginx配置文件:从全局块到upstream块的探索之旅

Nginx配置文件的简介 在浩瀚的互联网世界中&#xff0c;Nginx就如同一座大型交通枢纽&#xff0c;将访问者的请求精准地引导到正确的服务终点。而这一切&#xff0c;都离不开一个神秘而重要的角色——Nginx配置文件。这个文件&#xff0c;就像是一份详尽的路线图&#xff0c;为…

leetCode.84. 柱状图中最大的矩形

leetCode.84. 柱状图中最大的矩形 题目思路 代码 class Solution { public:int largestRectangleArea( vector<int>& h ) {int n h.size();vector<int> left( n ), right( n );stack<int> st;// 求每个矩形的第一个小于左边界的矩形 - 用单调栈for ( …

大小字符判断

//函数int my_isalpha(char c)的功能是返回字符种类 //大写字母返回1&#xff0c;小写字母返回-1.其它字符返回0 //void a 调用my_isalpha()&#xff0c;返回大写&#xff0c;输出*&#xff1b;返回小写&#xff0c;输出#&#xff1b;其它&#xff0c;输出&#xff1f; #inclu…

回归自然:拥抱生态农业

在这个喧嚣的时代&#xff0c;我们渴望回归大自然的怀抱&#xff0c;享受那份纯净与安宁。广西生态农业&#xff0c;正是我们追寻自然、健康生活的理想选择。它摒弃了传统农业的弊端&#xff0c;采用环保、可持续的种植方式&#xff0c;为我们带来了绿色、无污染的农产品。生态…