k8s 添加 node

当微服务不断增加时,资源不够用,需要增加新的node

系统:centos 8

修改hostname

hostnamectl set-hostname xxxx

重启生效

安装必要的软件

 yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip  libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  epel-release lrzsz openssh-server socat  ipvsadm conntrack bind-utils epel-release libffi-devel libaio-devel libxml2-devel cmake  device-mapper-persistent-data lvm2 yum-utils

其中yum-utils可以方便地管理软件源

关闭防火墙

systemctl stop firewalld  && systemctl  disable  firewalld
yum install iptables-services -y
iptables -F && service iptables save
service iptables stop && systemctl disable iptables

关闭selinux

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
setenforce 0

关闭swap

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

设置系统参数【所有节点】
(1)针对于linux7以上,设置允许路由转发,不对bridge的数据进行处理
创建 /etc/sysctl.d/k8s.conf 文件
vim /etc/sysctl.d/k8s.conf
加入下面内容:
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
(2)挂载br_nebrtfilter
modprobe br_netfilter
(3)生效配置文件
sysctl -p /etc/sysctl.d/k8s.conf
sysctl命令:用于运行时配置内核参数
查看是否生成相关文件
ls /proc/sys/net/bridge
(4)资源配置文件
vim /etc/security/limits.conf 是 Linux 资源使用配置文件,用来限制用户对系统资源的使用,末尾加入

echo “* soft nofile 65536” >> /etc/security/limits.conf
echo “* hard nofile 65536” >> /etc/security/limits.conf
echo “* soft nproc 65536” >> /etc/security/limits.conf
echo “* hard nproc 65536” >> /etc/security/limits.conf
echo “* soft memlock unlimited” >> /etc/security/limits.conf
echo “* hard memlock unlimited” >> /etc/security/limits.conf

添加软件源

配置安装k8s需要的yum源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
EOF

配置docker yum源,如果你的很慢,可以选择下方的阿里云docker yum源

#yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

清理缓存

yum clean all
yum makecache fast

安装docker

由于CentOS 8 默认使用podman代替Docker,执行
centos8 先运行:

yum erase podman buildah
yum install -y docker-ce

systemctl enable docker && systemctl start docker

systemctl status docker

注意查看docker的状态,是否有异常信息

如提示:

Centos /var/log/messages Unknown lvalue ‘TasksMax’ in section ‘Service’

解决方案
#yum install systemd-* -y
#systemctl status docker.service
 
验证方案
# systemctl restart docker.service
# systemctl status docker.service

“Not using native diff for overlay2, this may cause degraded performance for building images: opaque flag erroneously copied up, consider update to kernel 4.8 or later to fix” storage-driver=overlay2

表示要升级内核

修改docker配置文件

cat > /etc/docker/daemon.json <<EOF
{
 "exec-opts": ["native.cgroupdriver=systemd"],
 "log-driver": "json-file",
 "log-opts": {
   "max-size": "100m"
  },
 "storage-driver": "overlay2",
 "storage-opts": [
   "overlay2.override_kernel_check=true"
  ]
}
EOF

重启docker

systemctl daemon-reload && systemctl restart docker

安装k8s

开启k8s 网络桥接相关内核配置
设置网桥包经IPTables,core文件生成路径,配置永久生效

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 >/proc/sys/net/bridge/bridge-nf-call-ip6tables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl -p

安装kubeadm,kubelet和kubectl

 yum install kubeadm-1.18.0 kubelet-1.18.0 kubectl-1.18.0 -y 

 systemctl enable kubelet && systemctl start kubelet

配置k8s服务启动顺序

cat /etc/systemd/system/multi-user.target.wants/kubelet.service
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
Wants=network-online.target
After=network-online.target
After=containerd.service
After=docker.service

添加了最后两行

加入k8s集群

在master节点运行以下命令,查询加入集群的指令:

kubeadm token create --print-join-command

输出类似下面:

kubeadm join 192.168.1.199:6443 --token 7dwluq.x6nypje7h55rnrhl \
    --discovery-token-ca-cert-hash sha256:fa75619ab0bb6273126350a9dbda9aa6c89828c2c4650299fe1647ab510a7e6c

在新节点运行上面的命令即可。

node提示:

untime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:docker: network plugin is not ready: cni config uninitialized

表示插件kube-flannel未安装成功,通过是镜像下载过慢,如果手工下载:

docker pull quay.io/coreos/flannel:v0.12.0-amd64

配置节点保留资源

在节点的 /var/lib/kubelet/config.yaml 加入下列內容:

systemReserved:
  memory: 500Mi
  cpu: 250m
kubeReserved:
  memory: 500Mi
  cpu: 500m
evictionHard:
  memory.available: 200Mi
  nodefs.available: 20Gi

重启kubelet载入新设定

sudo systemctl restart kubelet

常用命令

删除节点

(1)卸载节点(drain 翻译排出,此时卸载节点,但是没有删除)

kubectl drain < node name > --delete-local-data --force --ignore-daemonsets

(2)删除节点

kubectl delete node < node name >

(3)清空init配置,需要删除的节点上执行

kubeadm reset

要重新加入再次执行kubeadm join命令即可。

批量删除失败pod

kubectl get pods -n dev | grep OutOfmemory | cut -d' ' -f 1 | xargs kubectl delete pod -n dev

删除所有因内存不足失败的pod

<think>好的,我现在需要回答用户关于如何在Kubernetesk8s)中查看节点标签的问题。首先,我得回忆一下k8s的基本命令,特别是与节点和标签相关的部分。 用户问的是查看节点的标签,所以我应该先想到kubectl命令,这是管理k8s集群的主要工具。kubectl get nodes应该可以列出所有节点,但如何显示标签呢?标签属于节点的元数据部分,所以可能需要使用特定的输出格式或者参数来显示标签信息。 我记得kubectl describe node <node-name>会显示节点的详细信息,其中包含标签。不过用户可能希望更简洁的方式,比如直接列出所有节点及其标签,而不需要详细描述。这时候,可能需要使用自定义列或者JSONPath来提取标签信息。 另一个方法是使用kubectl get nodes --show-labels,这个命令应该可以直接列出所有节点及其标签,每个节点的标签会显示在最后一列。这对用户来说可能比较方便,特别是当需要快速查看所有节点的标签时。 如果用户需要更结构化的输出,可能需要使用-o custom-columns参数来自定义显示的列,例如: kubectl get nodes -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels 这样会列出节点名称和对应的标签,但需要注意标签可能是一个键值对列表,可能需要进一步处理显示格式。 此外,如果需要查看特定节点的标签,可以使用kubectl get node <node-name> -o json | jq '.metadata.labels',这里用到了JSON输出和jq工具来提取标签部分。这对于复杂的标签结构可能更有效,但需要用户安装jq,这可能是一个额外步骤。 总结一下,可能的步骤包括: 1. 使用kubectl get nodes --show-labels快速查看所有节点标签。 2. 使用kubectl describe node <node-name>查看特定节点的详细信息,包括标签。 3. 使用自定义列输出或JSONPath来提取标签信息。 4. 结合JSON处理工具如jq进一步过滤和查看标签。 还需要验证这些命令是否正确,比如是否--show-labels确实存在,或者自定义列的语法是否正确。同时,提醒用户权限问题,可能需要适当的RBAC权限才能查看节点信息,以及确保kubectl配置正确连接到目标集群。 可能还需要举例说明每个命令的用法和输出示例,让用户更清楚如何操作。另外,解释标签的结构,比如键值对,以及如何添加或修改标签,但用户当前的问题只是查看,所以可能不需要深入其他操作,除非用户后续提问。 最后,确保回答结构清晰,分步骤说明不同的方法,帮助用户根据需求选择最适合的方式。</think>在Kubernetesk8s)中,查看节点的标签(Labels)可以通过以下步骤实现: --- ### **方法1:快速查看所有节点的标签** 使用 `kubectl get nodes` 命令并添加 `--show-labels` 参数: ```bash kubectl get nodes --show-labels ``` - **输出示例**: ``` NAME STATUS ROLES AGE VERSION LABELS node-01 Ready <none> 5d v1.24.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,... node-02 Ready master 5d v1.24.0 node-role.kubernetes.io/master=,kubernetes.io/arch=amd64,... ``` - **说明**:最后一列 `LABELS` 显示节点的所有标签(逗号分隔)。 --- ### **方法2:查看特定节点的标签** 使用 `kubectl describe node` 命令查看节点详细信息(包含标签): ```bash kubectl describe node <node-name> ``` - **输出示例**: ``` Name: node-01 Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 ... ``` - **说明**:在 `Labels` 字段下会列出所有标签。 --- ### **方法3:自定义输出格式** 通过 `-o custom-columns` 定义输出列,仅显示节点名称和标签: ```bash kubectl get nodes -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels ``` - **输出示例**: ``` NAME LABELS node-01 {"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux"...} node-02 {"kubernetes.io/arch":"amd64","node-role.kubernetes.io/master":""...} ``` - **说明**:标签以JSON格式显示。 --- ### **方法4:使用JSONPath提取标签** 通过JSONPath语法直接提取标签: ```bash kubectl get nodes -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.metadata.labels}{"\n"}{end}' ``` - **输出示例**: ``` node-01 {"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux"...} node-02 {"kubernetes.io/arch":"amd64","node-role.kubernetes.io/master":""...} ``` --- ### **方法5:结合jq工具(高级)** 如果已安装 `jq`,可以通过以下命令格式化输出: ```bash kubectl get nodes -o json | jq '.items[] | {name: .metadata.name, labels: .metadata.labels}' ``` - **输出示例**: ```json { "name": "node-01", "labels": { "beta.kubernetes.io/arch": "amd64", "beta.kubernetes.io/os": "linux", ... } } ``` --- ### **标签的作用** 标签用于标识节点的特性(如硬件类型、环境等),常用于: 1. 通过 `nodeSelector` 调度Pod到特定节点。 2. 结合亲和性(Affinity)控制工作负载分布。 3. 资源分组和管理。 --- ### **注意事项** - 确保有足够的RBAC权限查看节点信息。 - 标签的键格式需符合DNS子域名规范(如 `app.kubernetes.io/name`)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiegwei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值