sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://isxavja9.mirror.aliyuncs.com"], "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF sudo systemctl daemon-reload sudo systemctl restart docker
K8s Kubeclt的基础命令
# 查看所有的资源信息
$ kubectl get all
$ kubectl get --all-namespaces
# 查看pod列表
$ kubectl get pod
# 显示pod节点的标签信息
$ kubectl get pod --show-labels
# 根据指定标签匹配到具体的pod
$ kubectl get pods -l app=example
# 查看node节点列表
$ kubectl get node
# 显示node节点的标签信息
$ kubectl get node --show-labels
# 查看pod详细信息,也就是可以查看pod具体运行在哪个节点上(ip地址信息)
$ kubectl get pod -o wide
# 查看服务的详细信息,显示了服务名称,类型,集群ip,端口,时间等信息
$ kubectl get svc
$ kubectl get svc -n kube-system
# 查看命名空间
$ kubectl get ns
$ kubectl get namespaces
# 查看所有pod所属的命名空间
$ kubectl get pod --all-namespaces
# 查看所有pod所属的命名空间并且查看都在哪些节点上运行
$ kubectl get pod --all-namespaces -o wide
# 查看目前所有的replica set,显示了所有的pod的副本数,以及他们的可用数量以及状态等信息
$ kubectl get rs
# 查看已经部署了的所有应用,可以看到容器,以及容器所用的镜像,标签等信息
$ kubectl get deploy -o wide
$ kubectl get deployments -o wide
run 命令:在集群中创建并运行一个或多个容器镜像。run 命令:在集群中创建并运行一个或多个容器镜像。
语法:run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...]
# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例 $ kubectl run nginx --replicas=3 --labels="app=example" --image=nginx:1.10 --port=80
# 示例,运行一个名称为nginx,副本数为3,标签为app=example,镜像为nginx:1.10,端口为80的容器实例,并绑定到k8s-node1上$ kubectl run nginx --image=nginx:1.10 --replicas=3 --labels="app=example" --port=80 --overrides='{"apiVersion":"apps/v1","spec":{"template":{"spec":{"nodeSelector":{"kubernetes.io/hostname":"k8s-node1"}}}}}'
expose 命令:创建一个service服务,并且暴露端口让外部可以访问
# 创建一个nginx服务并且暴露端口让外界可以访问
$ kubectl expose deployment nginx --port=88 --type=NodePort --target-port=80 --name=nginx-service
set 命令:配置应用的一些特定资源,也可以修改应用已有的资源
使用 kubectl set --help
查看,它的子命令,env,image,resources,selector,serviceaccount,subject。
语法:resources (-f FILENAME | TYPE NAME) ([--limits=LIMITS & --requests=REQUESTS]
# 将deployment的nginx容器cpu限制为“200m”,将内存设置为“512Mi”
$ kubectl set resources deployment nginx -c=nginx --limits=cpu=200m,memory=512Mi
# 设置所有nginx容器中 Requests和Limits
$ kubectl set resources deployment nginx --limits=cpu=200m,memory=512Mi --requests=cpu=100m,memory=256Mi
# 删除nginx中容器的计算资源值
$ kubectl set resources deployment nginx --limits=cpu=0,memory=0 --requests=cpu=0,memory=0
explain 命令:用于显示资源文档信息
$ kubectl explain rs
edit 命令: 用于编辑资源信息
# 编辑Deployment nginx的一些信息 $ kubectl edit deployment nginx
# 编辑service类型的nginx的一些信息 $ kubectl edit service/nginx
设置命令:label,annotate,completion
label命令: 用于更新(增加、修改或删除)资源上的 label(标签)
- label 必须以字母或数字开头,可以使用字母、数字、连字符、点和下划线,最长63个字符。
- 如果 --overwrite 为 true,则可以覆盖已有的label,否则尝试覆盖label将会报错。
- 如果指定了--resource-version,则更新将使用此资源版本,否则将使用现有的资源版本。
:label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version]
# 给名为foo的Pod添加label unhealthy=true $ kubectl label pods foo unhealthy=true
# 给名为foo的Pod修改label 为 'status' / value 'unhealthy',且覆盖现有的value $ kubectl label --overwrite pods foo status=unhealthy
# 给 namespace 中的所有 pod 添加 label $ kubectl label pods --all status=unhealthy
# 仅当resource-version=1时才更新 名为foo的Pod上的label $ kubectl label pods foo status=unhealthy --resource-version=1
# 删除名为“bar”的label 。(使用“ - ”减号相连) $ kubectl label pods foo bar-
集群故障排查和调试命令:describe,logs,exec,attach,port-foward,proxy,cp,auth
describe命令:显示特定资源的详细信息
# 查看my-nginx pod的详细状态 $ kubectl describe po my-nginx
logs命令:用于在一个pod中打印一个容器的日志,如果pod中只有一个容器,可以省略容器名
kubectl logs [-f] [-p] POD [-c CONTAINER]
# 返回仅包含一个容器的pod nginx的日志快照 $ kubectl logs nginx
# 返回pod ruby中已经停止的容器web-1的日志快照 $ kubectl logs -p -c ruby web-1
# 持续输出pod ruby中的容器web-1的日志 $ kubectl logs -f -c ruby web-1
# 仅输出pod nginx中最近的20条日志 $ kubectl logs --tail=20 nginx
# 输出pod nginx中最近一小时内产生的所有日志 $ kubectl logs --since=1h nginx
- -c, --container="": 容器名。
- -f, --follow[=false]: 指定是否持续输出日志(实时日志)。
- --interactive[=true]: 如果为true,当需要时提示用户进行输入。默认为true。
- --limit-bytes=0: 输出日志的最大字节数。默认无限制。
- -p, --previous[=false]: 如果为true,输出pod中曾经运行过,但目前已终止的容器的日志。
- --since=0: 仅返回相对时间范围,如5s、2m或3h,之内的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
- --since-time="": 仅返回指定时间(RFC3339格式)之后的日志。默认返回所有日志。只能同时使用since和since-time中的一种。
- --tail=-1: 要显示的最新的日志条数。默认为-1,显示所有的日志。
- --timestamps[=false]: 在日志中包含时间戳。
exec命令:进入容器进行交互,在容器中执行命令
kubectl exec POD [-c CONTAINER] -- COMMAND [args...]
- -c, --container="": 容器名。如果未指定,使用pod中的一个容器。
- -p, --pod="": Pod名。
- -i, --stdin[=false]: 将控制台输入发送到容器。
- -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 进入nginx容器,执行一些命令操作 $ kubectl exec -it nginx-deployment-58d6d6ccb8-lc5fp bash
attach命令:连接到一个正在运行的容器。
kubectl attach POD -c CONTAINER
- -c, --container="": 容器名。如果省略,则默认选择第一个 pod。
- -i, --stdin[=false]: 将控制台输入发送到容器。
- -t, --tty[=false]: 将标准输入控制台作为容器的控制台输入。
# 获取正在运行中的pod 123456-7890的输出,默认连接到第一个容器 $ kubectl attach 123456-7890 # 获取pod 123456-7890中ruby-container的输出 $ kubectl attach 123456-7890 -c ruby-container # 切换到终端模式,将控制台输入发送到pod 123456-7890的ruby-container的“bash”命令,并将其输出到控制台/ # 错误控制台的信息发送回客户端。 $ kubectl attach 123456-7890 -c ruby-container -i -t
1、基础环境
所有机器执行以下操作
配置NetworkManager
NetworkManager 操作默认网络中接口的路由表 命名空间,其中 Calico veth 对被锚定以连接到容器。 这会干扰 Calico 代理正确路由的能力。
在以下位置创建配置文件 /etc/NetworkManager/conf.d/calico.conf阻止 NetworkManager 干扰接口:
[keyfile] unmanaged-devices=interface-name:cali*;interface-name:tunl*;interface-name:vxlan.calico
需要找对应版本 负责会出现安装错误(前面安装3.23.3安装出现问题)
一定要注意,如果是单机版,则直接master-ip:port即可以访问,如果是云版本,一定到找到pod对应的
node,然后浏览器访问 node-ip:port访问,我之前不知道,部署成功后也一直访问失败,官网上有说明,但没有看到整了好久。
文章评论