Kubernetes 知识积累

目录

WARNING: Kubernetes configuration file is group-readable

WARNING: Kubernetes configuration file is group-readable. This is insecure. Location: /root/.kube/config

chmod -R 600   ~/.kube/config

etcd cluster is unavailable or missconfigured
rm -rf kubekey/pki 
rm -rf /etc/etcd.env
rm -rf /etc/ssl/etcd/ssl

####### failed to set bridge addr: "cni0" already has an IP address different from 10.244.1.1/24

将这个错误的网卡删掉,它会自己重建,这里采用删除重生的方法,首先停用网络,然后删除配置


ifconfig cni0 down    
ip link delete cni0

#######

可以使用以下命令行来变更 Kubernetes Service 的暴露方式:

将 Service 类型从 ClusterIP 更改为 NodePort: $ kubectl patch service -p '{"spec": {"type": "NodePort"}}' 将 Service 类型从 ClusterIP 更改为 LoadBalancer: $ kubectl patch service -p '{"spec": {"type": "LoadBalancer"}}' 将 Service 类型从 NodePort 或 LoadBalancer 更改回 ClusterIP: $ kubectl patch service -p '{"spec": {"type": "ClusterIP"}}' 注意:在以上命令中,需要将 替换为实际的 Service 名称。

Kubernetes 中的节点 NotReady 状态通常表示该节点与集群之间存在一些问题,例如:

节点上的 kubelet 服务未正常启动,或者与 master 组件的连接出现了问题。

节点不具备所需的资源(例如 CPU、内存)或者网络环境不稳定,导致无法正常运行容器。

节点上的某些服务或进程发生了故障或崩溃,导致节点状态异常。

节点上的 Docker 引擎版本过低或者与 kubelet 不兼容,导致容器无法正常运行。

节点的系统时间与集群中其他节点的时间不同步,导致证书验证失败等问题。

为了解决节点 NotReady 的问题,可以采取以下措施:

检查节点的健康状态,确保 kubelet、Docker 引擎等组件已正常启动并能够正常工作。

检查节点的资源使用情况,确保节点具备所需的资源和网络环境。

检查节点上的服务和进程,排查故障并进行修复。

更新 Docker 引擎版本,或在节点上重新安装 Docker 引擎,并确保其与 kubelet 兼容。

检查节点的系统时间是否与其他节点同步,如有需要,手动进行时间同步。

以上是一些常见的排查和解决节点 NotReady 问题的方法。在实际使用中,还需要根据具体情况进行分析和处理。

######### 可以使用以下命令将本地文件上传到 FTP 服务器:

curl -T /path/to/local/file ftp://ftp.example.com/path/in/ftp/server/ --user username:password

这里,我们使用 curl 的 -T 参数来指定要上传的本地文件路径,然后将其上传到远程 FTP 服务器上的指定路径。ftp://ftp.example.com/path/in/ftp/server/ 是远程 FTP 服务器的地址和路径,--user username:password 指定了用户名和密码以进行身份验证。

如果需要在 FTP 服务器上创建目录,可以使用 -Q 参数进行 FTP 命令交互,例如:

curl ftp://ftp.example.com --user username:password -Q 'MKD /path/in/ftp/server/newdir'

这里,我们向远程 FTP 服务器发送了一个 MKD 命令以创建一个新的目录。同样,--user username:password 指定了用户名和密码以进行身份验证。

kubectl docker 挂在 token

如果您要将 Docker 与一个需要身份验证的 Kubernetes 集群进行通信,可以使用 kubectl 命令来生成 token 并将其挂载为 Docker 的配置文件。

以下是步骤:

  1. 首先,您需要在 Kubernetes API server 上生成一个新的 Service Account 和相应的 Secret。您可以通过运行以下命令来创建一个新的 Service Account 和 Secret,并将其绑定到一个 ClusterRole 上。
$ kubectl create sa <service_account_name> -n <namespace>
$ kubectl create clusterrolebinding <name> --clusterrole=<cluster_role_name> --serviceaccount=<namespace>:<service_account_name>

在这里, <service_account_name> 是您要创建的 Service Account 名称,<namespace> 是 Service Account 所在的命名空间,<cluster_role_name> 是该 Service Account 在 Kubernetes 集群中所需执行的操作权限。请记下生成的 token 的名称和值,后面有用。

  1. 然后,在本地机器上使用 kubectl 命令将 Service Account Token 写入到 kubeconfig 文件中,命令如下:
$ kubectl config set-credentials <credential_name> --token=<token_value>

在此处, <credential_name> 是一个新的凭证名称,<token_value> 是第一步中生成的服务帐户 Token 值。

  1. 将刚创建的凭证设置为默认凭证:
$ kubectl config set-context <context_name> --user=<credential_name>

在这里, <context_name> 是您的本地配置文件中的现有上下文名称。

  1. 最后,将 kubeconfig 文件复制到 Docker 主机,并将其挂载为 /root/.kube/config 文件:
$ scp ~/.kube/config root@<docker_host>:~/.kube/
$ docker run -it --rm -v /root/.kube/config:/root/.kube/config <your-image-name> sh

在这里,<docker_host> 是 Docker 宿主机 IP 或域名,<your-image-name> 是要运行的 Docker 镜像。

使用以上步骤,您应该就能生成并挂载 Service Account Token 了。

shell &>

在Shell脚本中,&> 是一个 I/O 重定向符号,用于将标准输出和标准错误流同时重定向到指定文件或位置。Syntax如下:

command &> filename

上述语法中,command 是要执行的命令或脚本, filename 是要写入其标准输出和标准错误流的目标文件名或位置。

当您使用 &> 时,stdout 和 stderr 共享同一文件描述符,并都被重定向到相同的文件。它等效于 >filename 2>&1,表示先将 stdout 重定向到文件,然后将标准错误流复制到与文件输出流相同的输入流。在这种方式下,无论是标准输出还是标准错误流,都会写入到同一个文件中。

此外,您还可以将 &> 用于/dev/null 地址来完全丢弃输出。例如:

command &> /dev/null

在这种情况下,标准输出和标准错误流都不会与终端或其他文件交互,而是被直接丢弃。

总之,&>是Shell中的一种重定向机制,可将命令或脚本的输出重定向到文件或/dev/null 等特定位置。

输入重定向

输入重定向是一种 shell 的 I/O 重定向技术,它允许将特定文件的内容作为命令的标准输入。在 shell 中,使用 < 符号来指定需要从哪个文件中读取数据作为输入,将其称为输入重定向符号。以下是使用输入重定向实现的一些例子:

  1. 将一个文件的内容传递给命令,并进行过滤
grep keyword < file.txt

在这个例子中,< 符号将文件 file.txt 中的内容作为输入重定向到了 grep 命令,使得 grep 命令以文件内容作为输入,并筛选出包含关键字 keyword 的行。

  1. 将一个文件的内容作为多个命令的输入
sort < file.txt | uniq | grep keyword

在这个例子中,< 符号将文件 file.txt 中的内容输入到管道中的第一个命令 sort 中,然后将 sort 命令的输出重定向到下一个命令 uniq 中,最后再通过管道将 uniq 命令的输出传递给最后一个命令 grep 进行过滤。

  1. 使用 Here Document 实现多行输入
cat << EOF > file.txt
This is line 1.
This is line 2.
EOF

在这个例子中,使用 << 符号和 EOF 实现了 Here Document,将多行文本作为命令的输入,并重定向到文件 file.txt 中。每一行文本都在 << 符号和 EOF 之间,在写入到文件之前,Shell 解释器会将这些文本转移到代码中,再将其传递给 cat 命令。

输入重定向是一个非常有用的技术,可以帮助减少键盘输入的工作量,并且在处理大量数据或多个文件时,也可以显著提高效率。