• k8s.gcr.io

    registry.cn-hangzhou.aliyuncs.com/google_containers

    或者

    registry.aliyuncs.com/google_containers

    或者

    mirrorgooglecontainers

  • gcr.io

    registry.aliyuncs.com

  • quay.io

    quay.mirrors.ustc.edu.cn

参考

k8s 配置文件

1
2
3
4
5
6
7
8
9
10
11
# 必填,版本号
apiVersion: v1
# 必填,
kind: Namespace
# 必填,元数据
metadata:
# 自定义标签
labels:
- name: string
# 名字
name: string

kubectl

  • Kubectl get 列出资源

  • kubectl describe 显示有关资源的详细信息

  • kubectl logs 打印 pod 和其中容器的日志

  • kubectl exec 在 pod 中的容器上执行命令

  • kubectl cluster-info –context kind-kind 切换集群,获取集群信息

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
# 帮助信息
kubectl get --help
# 获取节点信息
kubectl get pods $POD_NAME --namespace $NAMESPACE
# 获取所有部署信息
kubectl get deployments -A
# 获取指定app的部署信息
kubectl get deployments hello-world
# 获取有关 ReplicaSet(副本集) 对象的信息:
kubectl get replicasets
# 查看节点信息,可以快速查看node污点taints信息。
kubectl get nodes -o json | jq '.items[].spec'

# 获取详细部署信息
kubectl describe deployments hello-world
kubectl describe replicasets
# 获取节点详细信息
kubectl describe pods $POD_NAME --namespace $NAMESPACE

# 在运行中的 pod 容器中执行命令;列出环境变量
kubectl exec $POD_NAME -- env
# 在运行中的 pod 的容器中启动一个 bash 会话
kubectl exec -ti $POD_NAME -- bash

# 查看节点日志
kubectl logs $POD_NAME

# 创建dashboard访问token
# admin-user 账号名
# -n kubernetes-dashboard 标识命名空间
kubectl create token admin-user -n kubernetes-dashboard

  • 下载对应版本。

    clash

    1
    curl -LO https://github.com/Dreamacro/clash/releases/download/v1.10.6/clash-linux-amd64-v1.10.6.gz
  • 使用gunzip解压文件

    1
    2
    3
    4
    5
    6
    7
    gunzip clash-linux-amd64-v1.10.6.gz

    # 改名
    mv clash-linux-amd64-v1.10.6 ./clash

    # 添加可执行权限
    chmod +x clash
  • 设置配置文件 config.yaml

  • 启动

    1
    2
    3
    ./clash -d .
    # -d 指定配置文件目录
    # 如果是直接执行 ./clash,则配置文件放在 ~/.config/clash
  • 设置系统代理

    1
    2
    3
    export http_proxy="http://127.0.0.1:xxxx"
    export https_proxy="http://127.0.0.1:xxxx"
    # 可以添加到 ~/.bashrc 以永久生效
  • 远程管理

    在配置文件中可以看到

    1
    external-controller: '127.0.0.1:9090'

    可以使用 Clash远程管理页面 进行配置。

    设置密码:

    1
    secret: 'password'

临时修改主机名

1
2
3
4
sudo hostname <new-hostname>

# 例如:
sudo hostname name

这条命令不会更改/etc/hostname文件中的静态主机名(static hostname),它更改的只是临时主机名(transient hostname)。所以重启计算机后会回到旧的主机名。

永久修改主机名

如果想永久改变主机名,可以使用hostnamectl命令,或者使用vim手动修改/etc/hostname文件。

1
2
3
sudo hostnamectl set-hostname <new-hostname>

# sudo vi /etc/hostname

查看当前主机名

1
sudo hostnamectl

参考

修改用户名

使用usermod来修改用户名。

1
usermod -l new_username old_username

例子:假设我们有一个名叫 dan 的用户想要重命名为 susan,那么在终端下执行下面命令:

1
sudo usermod -l susan dan

这只会更改用户名,而其他的东西,比如用户组,家目录,UID 等都保持不变。

注意: 你需要从要改名的帐号中登出并杀掉该用户的所有进程,要杀掉该用户的所有进程可以执行下面命令:

1
2
sudo pkill -u dan
sudo pkill -9 dan

修改家目录

要同时更改家目录,我们需要在执行 usermod 命令的同时加上 -d 选项:

1
2
3
sudo usermod -d /home/susan -m susan
# 同时修改用户名和家目录,需要在其他用户或root用户下操作
sudo usermod -l susan -d /home/susan -m dan

更改用户 UID

执行下面命令修改用户 UID:

1
sudo usermod -u 2000 susan

这里 2000 就是用户的新 UID。

修改用户组名

要把用户组名从 dan 修改为 susan,我们需要使用 groupmod 命令。使用下面命令来修改用户组名:

1
groupmod -n susan dan

做完修改后,可以使用 id 命令来检查:

1
is susan

参考

访问应用程序

Kubernetes 中有两大类服务:

  • 节点端口
  • 负载均衡器

minikube 两者都支持。 继续阅读!

节点端口访问

NodePort 服务是将外部流量直接传输到您的服务的最基本方式。 NodePort,顾名思义,打开一个特定的端口,任何发送到这个端口的流量都会被转发给服务。

使用 service 命令获取 NodePort

我们还有一个获取 minikube IP 和服务的快捷方式 NodePort:

1
minikube service --url <service-name>

使用 kubectl 获取 NodePort

minikube VM 通过主机专用 IP 地址暴露给主机系统,该 IP 地址可以通过 minikube ip命令。 任何类型的服务 NodePort 可以在 NodePort 上通过该 IP 地址访问。

要确定服务的 NodePort,您可以使用 kubectl 像这样的命令(注意 nodePort 以小写开头 n 在 JSON 输出中):

1
kubectl get service <service-name> --output='jsonpath="{.spec.ports[0].nodePort}"'

增加 NodePort 范围

默认情况下,minikube 只公开端口 30000-32767。 如果这对您不起作用,您可以使用以下方法调整范围:

1
minikube start --extra-config=apiserver.service-node-port-range=1-65535

此标志还接受以逗号分隔的端口和端口范围列表。


负载均衡器访问

LoadBalancer 服务是向 Internet 公开服务的标准方式。 使用这种方法,每个服务都会获得自己的 IP 地址。

使用 minikube tunnel

服务类型 LoadBalancer 可以通过暴露 minikube tunnel 命令。 它必须在单独的终端窗口中运行以保持 LoadBalancer 跑步。 终端中的 Ctrl-C 可用于终止清理网络路由的进程。

例子:

在单独的终端中运行隧道

它会要求输入密码。

1
minikube tunnel

minikube tunnel 作为一个进程运行,使用集群的 IP 地址作为网关,在主机上创建到集群的服务 CIDR 的网络路由。 隧道命令将外部 IP 直接暴露给在主机操作系统上运行的任何程序。

隧道输出示例

1
2
3
4
5
6
7
8
9
10
11
[sudo] password for k1: 
Status:
machine: minikube
pid: 338850
route: 10.96.0.0/12 -> 192.168.49.2
minikube: Running
services: []
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors

创建 Kubernetes 部署

1
2
3
kubectl create deployment hello-minikube1 --image=k8s.gcr.io/echoserver:1.4
# 使用阿里云镜像:
kubectl create deployment hello-minikube1 --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4

创建一个 kubernetes 服务类型 LoadBalancer

1
kubectl expose deployment hello-minikube1 --type=LoadBalancer --port=8080

检查外部 IP

1
kubectl get svc
1
2
3
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello-minikube1 LoadBalancer 10.105.219.39 10.105.219.39 8080:31918/TCP 10s

请注意,如果没有 minikube 隧道,kubernetes 会将外部 IP 显示为“待处理”。

在浏览器中尝试

在浏览器中打开(确保没有设置代理)

1
http://REPLACE_WITH_EXTERNAL_IP:8080

每个服务都将获得自己的外部 ip。

清理孤立路由

如果 minikube tunnel突然关闭,它可能会在您的系统上留下孤立的网络路由。 如果发生这种情况,~/.minikube/tunnels.json 文件将包含该隧道的条目。 要删除孤立路由,请运行:

1
minikube tunnel --cleanup

笔记: --cleanup标志的默认值为 true.

避免密码提示

添加路由需要用户root权限,因此运行方式有差异 minikube tunnel取决于操作系统。 如果您想避免输入 root 密码,请考虑为“ip”和“route”命令设置 NOPASSWD:

https://superuser.com/questions/1328452/sudoers-nopasswd-for-single-executable-but-allowing-others

kubectl

在 minikube 中使用 kubectl

默认情况下, kubectl 被配置为访问 kubernetes 集群控制平面 在 minikube 里面的时候 minikube start命令被执行。

然而,如果 kubectl没有在本地安装,minikube 已经包含 kubectl 可以这样使用:

1
minikube kubectl -- <kubectl commands>

为 kubectl 设置别名以便于使用。

1
alias kubectl="minikube kubectl --"

或者,您可以创建一个符号链接到 minikube 的名为“kubectl”的二进制文件。

1
ln -s $(which minikube) /usr/local/bin/kubectl

  • 获取节点

    1
    minikube kubectl -- get pods
  • 在 Kubernetes 集群中创建部署

    1
    2
    3
    minikube kubectl -- create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
    # 使用阿里云镜像
    kubectl create deployment balanced --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4
  • 使用 NodePort 服务公开部署

    1
    minikube kubectl -- expose deployment hello-minikube --type=NodePort --port=8080
  • 获取帮助

    1
    minikube kubectl -- --help

Shell 自动补全

应用别名或符号链接后,您可以按照 https://kubernetes.io/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/ 启用 shell-autocompletion。

参考

minikube 开始

minikube 是本地 Kubernetes,专注于让 Kubernetes 易于学习和开发。

您所需要的只是 Docker(或类似兼容的)容器或虚拟机环境,而 Kubernetes 只需一个命令即可: minikube start

你需要什么

这里使用docker,提前安装好docker。

一、安装

  • linux
    安装最新的 minikube 稳定 版本 x86-64 Linux 使用 二进制下载 :
    1
    2
    curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
    sudo install minikube-linux-amd64 /usr/local/bin/minikube

二、启动集群

从具有管理员访问权限的终端(但未以 root 身份登录),运行:

1
2
3
4
5
6
minikube start

# 使用阿里云镜像启动
minikube start --image-mirror-country='cn' --image-repository='registry.cn-hangzhou.aliyuncs.com/google_containers'
# 可以使用代理选项
--docker-env=[HTTPS_PROXY='http://127.0.0.1:xxxx', HTTP_PROXY='http://127.0.0.1:xxxx']

如果 minikube 无法启动,请参阅 驱动程序页面 以获取设置兼容容器或虚拟机管理器的帮助。

三、与您的集群交互

如果您已经安装了 kubectl,您现在可以使用它来访问您闪亮的新集群:

1
kubectl get po -A

或者,minikube 可以下载适当版本的 kubectl,您应该可以像这样使用它:

1
minikube kubectl -- get po -A

您还可以通过将以下内容添加到您的 shell 配置中来使您的使用更轻松:

1
alias kubectl="minikube kubectl --"

最初,某些服务(例如 storage-provisioner)可能尚未处于运行状态。 这是集群启动期间的正常情况,并且会立即自行解决。 为了进一步了解您的集群状态,minikube 捆绑了 Kubernetes Dashboard,让您可以轻松适应新环境:

1
minikube dashboard

四、部署应用程序

创建一个示例部署并在端口 8080 上公开它:

1
2
3
4
5
6
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080

# 使用阿里云镜像:
kubectl create deployment hello-minikube --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4
kubectl expose deployment hello-minikube --type=NodePort --port=8080

这可能需要一点时间,但是当您运行时,您的部署将很快出现:

1
kubectl get services hello-minikube

访问此服务的最简单方法是让 minikube 为您启动 Web 浏览器:

1
minikube service hello-minikube

或者,使用 kubectl 转发端口:

1
kubectl port-forward service/hello-minikube 7080:8080

您的应用程序现在可以在 http://localhost:7080/ 访问。
您应该能够看到来自 nginx 的请求元数据,例如 CLIENT VALUES, SERVER VALUES, HEADERS RECEIVED和 BODY在应用程序输出中。 尝试更改请求的路径并观察 CLIENT VALUES. 类似地,您可以对它发出 POST 请求并观察身体出现在 BODY 输出部分。

负载均衡器部署

要访问 LoadBalancer 部署,请使用“minikube tunnel”命令。 这是一个示例部署:

1
2
3
4
5
kubectl create deployment balanced --image=k8s.gcr.io/echoserver:1.4  
kubectl expose deployment balanced --type=LoadBalancer --port=8080
# 使用阿里云镜像:
kubectl create deployment balanced --image=registry.cn-hangzhou.aliyuncs.com/google_containers/echoserver:1.4
kubectl expose deployment balanced --type=LoadBalancer --port=8080

在另一个窗口中,启动隧道以为“平衡”部署创建可路由 IP:

1
minikube tunnel

要查找可路由 IP,请运行此命令并检查 EXTERNAL-IP柱子:

1
kubectl get services balanced

五、管理您的集群

在不影响已部署应用程序的情况下暂停 Kubernetes:

1
minikube pause

取消暂停暂停的实例:

1
minikube unpause

停止集群:

1
minikube stop

增加默认内存限制(需要重新启动):

1
minikube config set memory 16384

浏览易于安装的 Kubernetes 服务目录:

1
minikube addons list

创建第二个运行旧 Kubernetes 版本的集群:

1
minikube start -p aged --kubernetes-version=v1.6.1

删除所有 minikube 集群:

1
minikube delete --all

下一步

参考

对文件取消跟踪,不删除本地文件

1
2
git rm --cached 文件路径
git rm --cached -r 文件夹路径

对某文件取消跟踪,并删除本地文件

1
git rm -f 文件路径

对所有文件取消跟踪,不删除本地

1
git rm --cached

对所有文件取消跟踪,并删除本地

1
git rm -f
0%