Kubernetes
介绍
使用 kubeadm 安装 k8s 1.31.2
container runtime 选择 containerd或者cri-o
安装网络插件 calico,节点监控 Metrics-Server
环境
| 节点 |
系统 |
IP |
| master |
centos7.9 |
192.168.157.128 |
| node1 |
centos7.9 |
192.168.157.129 |
基本配置
安装所需软件
1 2 3 4 5
| # CentOS7 操作 yum -y install wget device-mapper-persistent-data lvm2 chrony sshpass ipvsadm ipset sysstat conntrack libseccomp curl
# Ubuntu 操作 sudo apt-get update && sudo apt-get install -y lvm2 chrony sshpass ipvsadm ipset sysstat conntrack apt-transport-https curl
|
关闭防火墙
在某些 Kubernetes 组件或插件中,可能会出现权限问题,特别是在运行旧版本时。关闭 SELinux 可以避免这些问题。
ubuntu 忽略
1 2 3 4 5 6
| # 关闭防火墙 systemctl disable --now firewalld
# 关闭 SELinux setenforce 0 sed -i 's#SELINUX=enforcing#SELINUX=permissive#g' /etc/selinux/config
|
关闭 Swap
- 保证资源隔离:Kubernetes 使用 cgroups 来限制每个容器的资源使用,如 CPU 和内存。如果启用 swap,容器可能会超过其分配的内存限制,通过 swap 占用更多的内存资源,导致不准确的资源隔离。
- 稳定性:在启用 swap 时,可能会引起调度的不稳定,容器在高负载时容易被杀死,影响应用的性能和稳定性。
- Kubelet 要求:Kubelet 默认会检查节点是否禁用了 swap,若未关闭,则会拒绝启动。为了避免这种情况,一般选择关闭 swap。
1 2 3
| # 关闭交换分区 sudo sed -ri 's/.*swap.*/#&/' /etc/fstab sudo swapoff -a && sysctl -w vm.swappiness=0
|
网络配置
用于指定不由 NetworkManager 管理的设备,可以将特定的接口排除在 NetworkManager 的管理范围之外,以便其他工具或进程可以独立地管理和配置这些接口。
ubuntu 忽略
1 2 3 4 5 6 7 8 9 10 11
| cat > /etc/NetworkManager/conf.d/calico.conf << EOF [keyfile] unmanaged-devices=interface-name:cali*;interface-name:tunl* EOF
systemctl restart NetworkManager
# interface-name:cali* # 表示以 "cali" 开头的接口名称被排除在 NetworkManager 管理之外。例如,"cali0", "cali1" 等接口不受 NetworkManager 管理。 # interface-name:tunl* # 表示以 "tunl" 开头的接口名称被排除在 NetworkManager 管理之外。例如,"tunl0", "tunl1" 等接口不受 NetworkManager 管理。
|
进行时间同步
master 操作
将下方 192.168.157.0/24 换为你主机所在的网段
1 2 3 4 5 6 7 8 9 10 11 12 13
| cat > /etc/chrony.conf << EOF pool ntp.aliyun.com iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync allow 192.168.157.0/24 # 网段范围内的主机与chrony进行时间同步 local stratum 10 keyfile /etc/chrony.keys leapsectz right/UTC logdir /var/log/chrony EOF
systemctl restart chronyd ; systemctl enable chronyd
|
node 节点操作
将下方 192.168.157.128 修改为服务端节点
1 2 3 4 5 6 7 8 9 10 11 12 13
| cat > /etc/chrony.conf << EOF pool 192.168.157.128 iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync keyfile /etc/chrony.keys leapsectz right/UTC logdir /var/log/chrony EOF
systemctl restart chronyd ; systemctl enable chronyd #使用客户端进行验证 chronyc sources -v
|
配置 ulimit
- 限制文件描述符数量:Kubernetes 中的节点和容器可能需要打开大量文件描述符(例如日志文件、网络连接等)。如果未设置足够高的文件描述符限制,可能会导致
too many open files 错误,影响服务的正常运行。
- 控制进程数:在高负载的环境下,可能会有大量进程启动(如微服务环境中的多个 pod),这时需要对进程数限制进行合理配置,以防止系统因进程数过多而崩溃。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| ulimit -SHn 65535 cat >> /etc/security/limits.conf <<EOF * soft nofile 655360 * hard nofile 131072 * soft nproc 655350 * hard nproc 655350 * seft memlock unlimited * hard memlock unlimitedd EOF
# soft nofile 655360 # soft表示软限制,nofile表示一个进程可打开的最大文件数,默认值为1024。这里的软限制设置为655360,即一个进程可打开的最大文件数为655360。
# hard nofile 131072 # hard表示硬限制,即系统设置的最大值。nofile表示一个进程可打开的最大文件数,默认值为4096。这里的硬限制设置为131072,即系统设置的最大文件数为131072。
# soft nproc 655350 # soft表示软限制,nproc表示一个用户可创建的最大进程数,默认值为30720。这里的软限制设置为655350,即一个用户可创建的最大进程数为655350。
# hard nproc 655350 # hard表示硬限制,即系统设置的最大值。nproc表示一个用户可创建的最大进程数,默认值为4096。这里的硬限制设置为655350,即系统设置的最大进程数为655350。
# seft memlock unlimited # seft表示软限制,memlock表示一个进程可锁定在RAM中的最大内存,默认值为64 KB。这里的软限制设置为unlimited,即一个进程可锁定的最大内存为无限制。
# hard memlock unlimited # hard表示硬限制,即系统设置的最大值。memlock表示一个进程可锁定在RAM中的最大内存,默认值为64 KB。这里的硬限制设置为unlimited,即系统设置的最大内存锁定为无限制。
|
升级内核至4.18版本以上(可选)
- 增强的容器支持:内核 4.18 引入了对
cgroup v2、eBPF 等特性的改进,这些特性能够优化 Kubernetes 的资源管理和监控。使用 cgroup v2 可以更好地隔离和管理容器资源,减少资源争用。
- 性能优化:在高负载环境下,新内核引入的网络和存储优化可以显著提升 Kubernetes 集群的稳定性和性能。例如,
IPVS 在 4.18 及更高版本中有更好的支持,可提高服务负载均衡的效率。
- 安全增强:高版本内核包含一些安全补丁,有助于减少集群在面对现代漏洞(如 Meltdown、Spectre)时的风险,增强系统的整体安全性。
ubuntu忽略
1 2 3 4
| # 添加启用源 yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm -y sed -i "s@mirrorlist@#mirrorlist@g" /etc/yum.repos.d/elrepo.repo sed -i "s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g" /etc/yum.repos.d/elrepo.repo
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # 安装最新的内核 # 我这里选择的是稳定版 kernel-ml 如需更新长期维护版本 kernel-lt yum -y --enablerepo=elrepo-kernel install kernel-ml
# 查看已安装那些内核 rpm -qa | grep kernel
# 查看默认内核 grubby --default-kernel
# 若不是最新的使用命令设置 grubby --set-default $(ls /boot/vmlinuz-* | grep elrepo)
# 重启生效 reboot
|
安装 ipvsadm
-
高性能:IPVS(IP Virtual Server)相比默认的 iptables 模式在高并发场景下具有更好的性能,适合大型集群。
-
低延迟:IPVS 使用 Linux 内核级别的负载均衡实现,延迟更低,支持轮询、最小连接数等多种调度算法,提升服务访问效率。
-
管理和查看 IPVS 规则:虽然 IPVS 模式本身不依赖 ipvsadm 运行,但 ipvsadm 提供了查看和管理 IPVS 规则的功能。例如,可以通过 ipvsadm -Ln 命令列出当前的 IPVS 负载均衡规则,帮助运维人员排查网络问题。
-
监控 IPVS 状态:可以查看当前连接数、路由等信息,便于调优和监控负载均衡状态。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| yum install ipvsadm ipset sysstat conntrack libseccomp -y apt install ipvsadm ipset sysstat conntrack -y
cat >> /etc/modules-load.d/ipvs.conf <<EOF ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack ip_tables ip_set xt_set ipt_set ipt_rpfilter ipt_REJECT ipip EOF
# 重载模块 systemctl restart systemd-modules-load.service
# 检查配置 lsmod | grep -e ip_vs -e nf_conntrack
# ip_vs # IPVS 是 Linux 内核中的一个模块,用于实现负载均衡和高可用性。它通过在前端代理服务器上分发传入请求到后端实际服务器上,提供了高性能和可扩展的网络服务。 #
# IPVS 的一种调度算法之一,使用轮询方式分发请求到后端服务器,每个请求按顺序依次分发。 #
# IPVS 的一种调度算法之一,使用加权轮询方式分发请求到后端服务器,每个请求按照指定的权重比例分发。 #
# IPVS 的一种调度算法之一,使用哈希方式根据源 IP 地址和目标 IP 地址来分发请求。 #
# 这是一个内核模块,用于跟踪和管理网络连接,包括 TCP、UDP 和 ICMP 等协议。它是实现防火墙状态跟踪的基础。 #
# 这是一个内核模块,提供了对 Linux 系统 IP 数据包过滤和网络地址转换(NAT)功能的支持。 #
# 这是一个内核模块,扩展了 iptables 的功能,支持更高效的 IP 地址集合操作。 #
# 这是一个内核模块,扩展了 iptables 的功能,支持更高效的数据包匹配和操作。 #
# 这是一个用户空间工具,用于配置和管理 xt_set 内核模块。 #
# 这是一个内核模块,用于实现反向路径过滤,用于防止 IP 欺骗和 DDoS 攻击。 #
# 这是一个 iptables 目标,用于拒绝 IP 数据包,并向发送方发送响应,指示数据包被拒绝。 #
# 这是一个内核模块,用于实现 IP 封装在 IP(IP-over-IP)的隧道功能。它可以在不同网络之间创建虚拟隧道来传输 IP 数据包。
|
修改内核参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
| cat <<EOF > /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 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.tcp_timestamps = 0 net.core.somaxconn = 16384
net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 net.ipv6.conf.lo.disable_ipv6 = 0 net.ipv6.conf.all.forwarding = 1 EOF
modprobe br_netfilter sysctl -p /etc/sysctl.d/k8s.conf sysctl --system
# 这些是Linux系统的一些参数设置,用于配置和优化网络、文件系统和虚拟内存等方面的功能。以下是每个参数的详细解释: #
# - 这个参数启用了IPv4的IP转发功能,允许服务器作为网络路由器转发数据包。 #
# - 当使用网络桥接技术时,将数据包传递到iptables进行处理。 # # 3. fs.may_detach_mounts = 1 # - 允许在挂载文件系统时,允许被其他进程使用。 # # 4. vm.overcommit_memory=1 # - 该设置允许原始的内存过量分配策略,当系统的内存已经被完全使用时,系统仍然会分配额外的内存。 #
# - 当系统内存不足(OOM)时,禁用系统崩溃和重启。 #
# - 设置系统允许一个用户的inotify实例可以监控的文件数目的上限。 #
# - 设置系统同时打开的文件数的上限。 #
# - 设置系统同时打开的文件描述符数的上限。 #
# - 设置系统可以创建的网络连接跟踪表项的最大数量。 #
# - 设置TCP套接字的空闲超时时间(秒),超过该时间没有活动数据时,内核会发送心跳包。 #
# - 设置未收到响应的TCP心跳探测次数。 #
# - 设置TCP心跳探测的时间间隔(秒)。 #
# - 设置系统可以使用的TIME_WAIT套接字的最大数量。 #
# - 启用TIME_WAIT套接字的重新利用,允许新的套接字使用旧的TIME_WAIT套接字。 #
# - 设置系统可以同时存在的TCP套接字垃圾回收包裹数的最大数量。 #
# - 设置系统对于孤立的TCP套接字的重试次数。 #
# - 启用TCP SYN cookies保护,用于防止SYN洪泛攻击。 #
# - 设置新的TCP连接的半连接数(半连接队列)的最大长度。 #
# - 设置系统可以创建的网络连接跟踪表项的最大数量。 #
# - 关闭TCP时间戳功能,用于提供更好的安全性。 #
# - 设置系统核心层的连接队列的最大值。 #
# - 启用IPv6协议。 #
# - 启用IPv6协议。 #
# - 启用IPv6协议。 #
# - 允许IPv6数据包转发。
# modprobe br_netfilter 该命令加载 br_netfilter 内核模块,该模块允许桥接接口的过滤功能(通常是处理网络包)。它是启用 Kubernetes 集群的容器网络功能(如网络策略)的必要模块,特别是在节点上使用桥接网络时。
# sysctl -p /etc/sysctl.d/k8s.conf # 该命令应用 /etc/sysctl.d/k8s.conf 配置文件中的内核参数。通常,该文件包含与 Kubernetes 和容器网络相关的配置,类似于启用 IP 转发(net.ipv4.ip_forward)和其他网络优化设置。
# sysctl --system # 该命令重新加载所有的 sysctl 配置文件,通常是 /etc/sysctl.conf 和 /etc/sysctl.d/ 目录下的所有配置文件。它应用系统级别的内核参数设置,以确保系统的内核配置符合预期。
|
所有节点配置 hosts 本地解析
修改 /etc/hosts 文件,新增节点
1 2
| 192.168.157.128 master 192.168.157.129 node1
|
配置容器
containerd 或者 cri-o 二选一
配置containerd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| # 下载所需应用包 wget https://github.com/containerd/containerd/releases/download/v1.7.18/cri-containerd-cni-1.7.18-linux-amd64.tar.gz wget https://github.com/containernetworking/plugins/releases/download/v1.5.1/cni-plugins-linux-amd64-v1.5.1.tgz
# centos7 要升级libseccomp yum -y install https://yum.oracle.com/repo/OracleLinux/OL8/baseos/latest/x86_64/getPackage/libseccomp-2.5.1-1.el8.x86_64.rpm
#创建cni插件所需目录 mkdir -p /etc/cni/net.d /opt/cni/bin #解压cni二进制包 tar xf cni-plugins-linux-amd64-v*.tgz -C /opt/cni/bin/
#解压 tar -xzf cri-containerd-cni-*-linux-amd64.tar.gz -C /
#创建服务启动文件 cat > /etc/systemd/system/containerd.service <<EOF [Unit] Description=containerd container runtime Documentation=https://containerd.io After=network.target local-fs.target
[Service] ExecStartPre=-/sbin/modprobe overlay ExecStart=/usr/local/bin/containerd Type=notify Delegate=yes KillMode=process Restart=always RestartSec=5 LimitNPROC=infinity LimitCORE=infinity LimitNOFILE=infinity TasksMax=infinity OOMScoreAdjust=-999
[Install] WantedBy=multi-user.target EOF
|
配置内核
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| # 配置 Containerd 所需的模块 cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
# 加载模块 systemctl restart systemd-modules-load.service
# 配置 Containerd 所需的内核 cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
# 加载内核 sysctl --system
|
修改默认配置
1 2 3 4 5 6 7 8 9 10
| mkdir -p /etc/containerd containerd config default | tee /etc/containerd/config.toml
# 修改 Containerd 的配置文件 sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml cat /etc/containerd/config.toml | grep SystemdCgroup sed -i "s#registry.k8s.io/pause:3.8#k8s.m.daocloud.io/pause:3.10#g" /etc/containerd/config.toml cat /etc/containerd/config.toml | grep sandbox_image sed -i "s#config_path\ \=\ \"\"#config_path\ \=\ \"/etc/containerd/certs.d\"#g" /etc/containerd/config.toml cat /etc/containerd/config.toml | grep certs.d
|
配置加速器
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 配置加速器 mkdir /etc/containerd/certs.d/docker.io -pv cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF server = "https://docker.io" [host."https://docker.m.daocloud.io"] capabilities = ["pull", "resolve"] EOF
mkdir /etc/containerd/certs.d/registry.k8s.io -pv cat > /etc/containerd/certs.d/registry.k8s.io/hosts.toml << EOF server = "https://registry.k8s.io" [host."https://k8s.m.daocloud.io"] capabilities = ["pull", "resolve"] EOF
|
启动
1 2 3 4 5 6 7
| # 启动并设置为开机启动 systemctl daemon-reload systemctl enable --now containerd.service systemctl stop containerd.service systemctl start containerd.service systemctl restart containerd.service systemctl status containerd.service
|
配置CRI-O
配置内核
1 2 3 4 5 6 7 8 9
| # 配置 CRI-O 所需的模块 cat > /etc/modules-load.d/crio.conf << EOF overlay br_netfilter EOF
# 加载模块 modprobe overlay systemctl restart systemd-modules-load.service
|
安装
1 2 3 4 5 6 7 8
| VERSION=1.28 OS=CentOS_7
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/devel:kubic:libcontainers:stable.repo
curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$VERSION/$OS/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo
yum install -y cri-o
|
修改配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| vi /etc/crio/crio.conf # 修改 pause_image pause_image = "k8s.m.daocloud.io/pause:3.10"
vi /etc/containers/registries.conf # 修改 unqualified-search-registries unqualified-search-registries = ["docker.m.daocloud.io", "k8s.m.daocloud.io"]
# 启动并设置为开机启动 systemctl daemon-reload systemctl enable --now crio.service systemctl stop crio.service systemctl start crio.service systemctl restart crio.service systemctl status crio.service
|
配置安装源
Kubernetes 是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。
由于 Kubernetes 官方变更了仓库的存储路径以及使用方式,如果需要使用 1.28 及以上版本,请使用 新版配置方法 进行配置。
centos
注意修改为自己需要的版本号
1 2 3 4 5 6 7 8 9 10 11 12
| cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/ enabled=1 gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.31/rpm/repodata/repomd.xml.key EOF
yum update -y && yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet
|
修改镜像
coredns 镜像名在拉取的时候有名称问题,需要修改名称
如果使用 CRI-O,请使用 podman 更改镜像
1 2 3 4 5 6 7 8 9
| # 查看最新版本有那些镜像 kubeadm config images list --image-repository k8s.m.daocloud.io
# 拉取镜像 ctr --namespace k8s.io images pull k8s.m.daocloud.io/coredns/coredns:v1.11.3 # 修改镜像名称 ctr --namespace k8s.io images tag k8s.m.daocloud.io/coredns/coredns:v1.11.3 k8s.m.daocloud.io/coredns:v1.11.3 # 查看镜像 ctr --namespace k8s.io images ls | grep coredns
|
修改初始化配置
master 节点操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 生成默认配置 kubeadm config print init-defaults > kubeadm.yaml
# 修改以下内容 localAPIEndpoint: advertiseAddress: 192.168.157.128 # 修改为 master IP nodeRegistration: criSocket: unix:///var/run/containerd/containerd.sock # 如果为 containerd 则不需要修改,如果是 CRI-O,则修改为unix:///var/run/crio/crio.sock name: master # 修改为 master 的主机名 imageRepository: k8s.m.daocloud.io # 修改镜像加速 kubernetesVersion: 1.31.2 # 修改镜像版本
podSubnet: 172.16.0.0/12 # 在 dnsDomain: cluster.local 下添加
# 在最末尾添加以下内容 --- apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd
|
初始化
master 节点上操作
1 2 3 4 5 6 7 8 9 10
| # 初始化 k8s kubeadm init --config=kubeadm.yaml
# 配置config mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config
# 重新初始化 kubeadm reset
|
node 节点运行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 在node上执行操作,将加入工作节点 cat > kubeadm-join-node.yaml << EOF apiVersion: kubeadm.k8s.io/v1beta3 kind: JoinConfiguration discovery: bootstrapToken: apiServerEndpoint: 192.168.157.128:6443 # 这里修改为master的ip加对应的绑定端口 token: "abcdef.0123456789abcdef" # 这里修改为master的k8s初始化配置文件中的token caCertHashes: - "sha256:e614d994febfbebd58d8c78df839532ddabb05b5f3466fdf0018546fc010c9a0" # 请更改上面的认证信息,使之与你的集群中实际使用的令牌和 CA 证书匹配 nodeRegistration: kubeletExtraArgs: node-ip: 192.168.157.129 # 这里修改为node的IP EOF
kubeadm join --config=kubeadm-join-node.yaml
|
配置 Calico
1 2 3 4 5 6 7 8 9 10 11
| wget https://raw.githubusercontent.com/projectcalico/calico/refs/heads/master/manifests/calico-typha.yaml
vi calico-typha.yaml # 修改 CALICO_IPV4POOL_CIDR 配置 - name: CALICO_IPV4POOL_CIDR value: "172.16.0.0/12"
# 切换国内仓库 sed -i "s#docker.io/calico/#docker.m.daocloud.io/calico/#g" calico-typha.yaml
kubectl apply -f calico-typha.yaml
|
配置 Metrics-Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
vim components.yaml # 添加- --kubelet-insecure-tls - 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 # 修改镜像地址 sed -i "s#registry.k8s.io#k8s.m.daocloud.io#g" components.yaml cat components.yaml | grep image
kubectl apply -f components.yaml
kubectl top node
|
配置命令行自动补全功能
1 2 3 4
| yum install bash-completion -y source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
|
HELM
介绍
Helm 安装 charts 到 Kubernetes 集群中,每次安装都会创建一个新的 release。你可以在 Helm 的 chart repositories 中寻找新的 chart。^12
Chart 代表着 Helm 包。它包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。你可以把它看作是 Homebrew formula,Apt dpkg,或 Yum RPM 在Kubernetes 中的等价物。
Repository(仓库) 是用来存放和共享 charts 的地方。它就像 Perl 的 CPAN 档案库网络 或是 Fedora 的 软件包仓库,只不过它是供 Kubernetes 包所使用的。
Release 是运行在 Kubernetes 集群中的 chart 的实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。以 MySQL chart为例,如果你想在你的集群中运行两个数据库,你可以安装该chart两次。每一个数据库都会拥有它自己的 release 和 release name。
安装HELM
1 2 3
| wget https://mirrors.huaweicloud.com/helm/v3.16.3/helm-v3.16.3-linux-amd64.tar.gz tar xvf helm-*-linux-amd64.tar.gz cp linux-amd64/helm /usr/local/bin/
|
操作HELM
查找 charts
1 2
| helm search hub [app_name] # 从 Artifact Hub 中查找并列出 helm charts。 Artifact Hub中存放了大量不同的仓库。 helm search repo [repo_name|app_name] # 从你添加(使用 helm repo add)到本地 helm 客户端中的仓库中进行查找。该命令基于本地数据进行搜索,无需连接互联网。
|
安装前自定义 chart
1
| helm show values [app_name] # 可以查看 chart 中的可配置选项
|
你可以使用 YAML 格式的文件覆盖上述任意配置项,并在安装过程中使用该文件
1 2
| echo '{mariadb.auth.database: user0db, mariadb.auth.username: user0}' > values.yaml helm install -f values.yaml bitnami/wordpress --generate-name
|
上述命令将为 MariaDB 创建一个名称为 user0 的默认用户,并且授予该用户访问新建的 user0db 数据库的权限。chart 中的其他默认配置保持不变。--generate-name随机生成release名字
安装过程中有两种方式传递配置数据:
--values (或 -f):使用 YAML 文件覆盖配置。可以指定多次,优先使用最右边的文件。
--set:通过命令行的方式对指定项进行覆盖。
如果同时使用两种方式,则 --set 中的值会被合并到 --values 中,但是 --set 中的值优先级更高。在--set 中覆盖的内容会被被保存在 ConfigMap 中。可以通过 helm get values <release-name> 来查看指定 release 中 --set 设置的值。也可以通过运行 helm upgrade 并指定 --reset-values 字段来清除 --set 中设置的值。
追踪 release 的状态
1
| helm status <release> -n <namespace>
|
更多安装方法
helm install 命令可以从多个来源进行安装:
- chart 的仓库(如上所述)
- 本地 chart 压缩包(
helm install foo foo-0.1.1.tgz)
- 解压后的 chart 目录(
helm install foo path/to/foo)
- 完整的 URL(
helm install foo https://example.com/charts/foo-1.2.3.tgz)
升级 release
当你想升级到 chart 的新版本,或是修改 release 的配置,你可以使用 helm upgrade 命令。
一次升级操作会使用已有的 release 并根据你提供的信息对其进行升级。由于 Kubernetes 的 chart 可能会很大而且很复杂,Helm 会尝试执行最小侵入式升级。即它只会更新自上次发布以来发生了更改的内容。
1
| helm upgrade -f panda.yaml happy-panda bitnami/wordpress
|
happy-panda 这个 release 使用相同的 chart 进行升级,但是使用了一个新的 YAML 文件
可以使用 helm get values 命令来看看配置值是否真的生效了
1
| helm get values happy-panda
|
失败时恢复
在一次发布过程中,发生了不符合预期的事情,也很容易通过 helm rollback [RELEASE] [REVISION] 命令回滚到之前的发布版本。
1
| helm rollback happy-panda 1
|
上面这条命令将我们的 happy-panda 回滚到了它最初的版本。release 版本其实是一个增量修订(revision)。 每当发生了一次安装、升级或回滚操作,revision 的值就会加1。第一次 revision 的值永远是1。我们可以使用 helm history [RELEASE] 命令来查看一个特定 release 的修订版本号。
卸载 release
1
| helm uninstall happy-panda
|
可以通过 helm list 命令看到当前部署的所有 release
1
| helm list -n <namespace>
|
在 Helm 3 中,删除会移除 release 的记录。 如果你想保留删除记录,使用 helm uninstall --keep-history。使用 helm list --uninstalled 只会展示使用了 --keep-history 删除的 release。
helm list --all 会展示 Helm 保留的所有 release 记录,包括失败或删除的条目(指定了 --keep-history)
使用仓库
Helm 3 不再附带一个默认的 chart 仓库。helm repo 提供了一组命令用于添加、列出和移除仓库。
1 2 3 4
| helm repo list # 查看配置的仓库 helm repo add dev https://example.com/dev-charts # 添加新的仓库 helm repo update # 确保你的 Helm 客户端是最新的 helm repo remove # 移除仓库
|
Kubernetes Documentation | Kubernetes
cby-chen/Kubernetes: kubernetes (k8s) 二进制高可用安装
libseccomp-2.5.1-1.el8.x86_64.rpm Oracle Linux 8 Download
DaoCloud/public-image-mirror
kubernetes-new安装包下载_开源镜像站-阿里云
containerd/containerd: An open and reliable container runtime
containernetworking/plugins: Some reference and example networking plugins, maintained by the CNI team.
kubernetes-new-core-stable安装包下载_开源镜像站-阿里云
calico/manifests/calico-typha.yaml at master · projectcalico/calico
Index of helm-local
Installation | dashboard