目录
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
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 的配置文件。
以下是步骤:
- 首先,您需要在 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
的名称和值,后面有用。
- 然后,在本地机器上使用 kubectl 命令将 Service Account Token 写入到 kubeconfig 文件中,命令如下:
$ kubectl config set-credentials <credential_name> --token=<token_value>
在此处, <credential_name>
是一个新的凭证名称,<token_value>
是第一步中生成的服务帐户 Token 值。
- 将刚创建的凭证设置为默认凭证:
$ kubectl config set-context <context_name> --user=<credential_name>
在这里, <context_name>
是您的本地配置文件中的现有上下文名称。
- 最后,将 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 中,使用 <
符号来指定需要从哪个文件中读取数据作为输入,将其称为输入重定向符号。以下是使用输入重定向实现的一些例子:
- 将一个文件的内容传递给命令,并进行过滤
grep keyword < file.txt
在这个例子中,<
符号将文件 file.txt
中的内容作为输入重定向到了 grep
命令,使得 grep
命令以文件内容作为输入,并筛选出包含关键字 keyword
的行。
- 将一个文件的内容作为多个命令的输入
sort < file.txt | uniq | grep keyword
在这个例子中,<
符号将文件 file.txt
中的内容输入到管道中的第一个命令 sort
中,然后将 sort
命令的输出重定向到下一个命令 uniq
中,最后再通过管道将 uniq
命令的输出传递给最后一个命令 grep
进行过滤。
- 使用 Here Document 实现多行输入
cat << EOF > file.txt
This is line 1.
This is line 2.
EOF
在这个例子中,使用 <<
符号和 EOF
实现了 Here Document,将多行文本作为命令的输入,并重定向到文件 file.txt
中。每一行文本都在 <<
符号和 EOF
之间,在写入到文件之前,Shell 解释器会将这些文本转移到代码中,再将其传递给 cat
命令。
输入重定向是一个非常有用的技术,可以帮助减少键盘输入的工作量,并且在处理大量数据或多个文件时,也可以显著提高效率。