仙玉衡 - Kubernetes
type: channel
link: https://xyh.moe/index.php/tag/Kubernetes/
items: KubeSphere 部署
items: K3S
items: CKS 考题
items: CKA 考题
items: Kubernetes

KubeSphere 部署
type: item
date: 2025-09-30T17:43:00+08:00
description: 前言 个人对 kubesphere 删库闭源这件事很FXXK。 目前部署 kubesphere 的难度更多来源于镜像缺失。 docker.io 上只有4.1.3的相关镜像，部分镜像甚至没有。 现在开放的最新版是 4.1.3,但该版本有点点小bug，还是推荐 4.1.2。 其中一个bug点在，某镜像中调用的命令是 ks-controller-manager,但镜像中实际只有controller-manager，需要手动修改yaml纠正。 前置条件 你得先有个 kubernetes 集群 helm ks-core 文件 kubesphere 相关镜像 helm 部署 这里要指定扩展中心镜像ksExtensionRepository.image.tag，默认镜像里很多扩展都被移除了。 另外可以指定仓库源。 ks-core-1.1.2.tgz 在 github 项目，config/ks-core，将该目录打包为tgz，可指定为该本地tgz文件。 helm upgrade --install \ -n kubesphere-system --create-namespace ks-core https://mirrors.xyh.moe/linux/kubernetes/ks-core-1.1.2.tgz \ --set global.imageRegistry=docker.xyh.moe \ --set extension.imageRegistry=docker.xyh.moe \ --set ksExtensionRepository.image.tag=v1.1.5 \ --debug \ --wait WEB访问 部署成功后会有如下提示 NOTES: Thank you for choosing KubeSphere Helm Chart. Please be patient and wait for several seconds for the KubeSphere deployment to complete. Wait for Deployment Completion Confirm that all KubeSphere components are running by executing the following command: kubectl get pods -n kubesphere-system Access the KubeSphere Console Once the deployment is complete, you can access the KubeSphere console using the following URL: http://xxx.xxx.xxx.xxx:30880 Login to KubeSphere Console Use the following credentials to log in: Account: admin Password: P@88w0rd NOTE: It is highly recommended to change the default password immediately after the first login. For additional information and details, please visit https://kubesphere.io. 部署完成后访问 http://ip:30880 用户名：admin 密码：P@88w0rd 登陆后会要求修改初始密码 扩展 WhizardTelemetry 平台服务 WhizardTelemetry 数据流水线 WhizardTelemetry 监控 OpenSearch 分布式检索与分析引擎 WhizardTelemetry 日志 Metrics Server WhizardTelemetry 通知 WhizardTelemetry 事件 WhizardTelemetry 告警 KubeSphere 服务网格 Grafana for WhizardTelemetry 基本上改下仓库源就能直接部署了，需要注意的是部分容器需要PV,请提前置备，不然会卡住，也不会有明显的提示。 提前置备的话会自动使用，后置置备的话就需要手动分配给PVC。

K3S
type: item
date: 2025-05-09T16:16:00+08:00
description: K3S 部署 文件 k3s # 可执行文件 k3s-airgap-images-amd64.tar # 镜像离线包 install.sh # 安装脚本 mkdir -p /usr/local/bin mkdir -p /var/lib/rancher/k3s/agent/images curl -fsSL https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s-airgap-images-amd64.tar.gz -o /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.gz curl -fsSL https://github.com/k3s-io/k3s/releases/download/v1.30.14%2Bk3s2/k3s -o /usr/local/bin/k3s curl -fsfL https://get.k3s.io -o /usr/local/bin/install.sh chmod +x /usr/local/bin/k3s # 安装 # Server 节点 INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh # Agent 节点 # K3S_TOKEN cat /var/lib/rancher/k3s/server/node-token INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://<SERVER_IP>:6443 K3S_TOKEN=<YOUR_TOKEN> ./install.sh # 在线执行 # --write-kubeconfig-mode 644 普通用户可执行 curl -fsSL https://get.k3s.io | \ INSTALL_K3S_SKIP_DOWNLOAD=true \ INSTALL_K3S_EXEC="--node-name master1 --write-kubeconfig-mode 644" \ sh - curl -fsSL https://mirrors.xyh.moe:8888/linux/k3s/install.sh | \ INSTALL_K3S_SKIP_DOWNLOAD=true K3S_URL=https://192.168.8.244:6443 \ INSTALL_K3S_EXEC="--node-name agent2" \ K3S_TOKEN="K103cd36c3188b95b44347317a2957384223e0ba7706828b4b932a32d2d1998ccff::server:cea5c67aaa2f16986e86881ba8be718a" sh - # 检查 systemctl status k3s k3s kubectl get nodes Rancher-Docker name: rancher services: rancher: image: rancher/rancher:latest hostname: rancher restart: unless-stopped privileged: true ports: - 9876:80 - 9877:443 配置代理 /etc/systemd/system/k3s.service.env HTTP_PROXY="http://127.0.0.1:10809" HTTPS_PROXY="http://127.0.0.1:10809" NO_PROXY="localhost,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,.example.com"

CKS 考题
type: item
date: 2025-02-08T00:19:00+08:00
description: ❄ RuntimeClass | gVisor https://kubernetes.io/zh-cn/docs/concepts/containers/runtime-class/ 该集群用 containerd 作为 CRI 运行时。 containerd 的默认运行时处理程序是 runc。 containerd 已准备好支持额外的运行时处理程序 runsc（gVisor） 使用名为 runsc 的现有运行时处理程序，创建一个名为 untrusted 的 RuntimeClass 更新 namespace server 中的所有 Pod 以在 gVisor 上运行。您可以在 /cks/gVisor/rc.yaml 中找到一个模版清单。 # /cks/gVisor/rc.yaml apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: 创建 RuntimeClass # gvisorRuntimeClass.yml apiVersion: node.k8s.io/v1 kind: RuntimeClass metadata: name: untrusted handler: runsc kubectl create -f gvisorRuntimeClass.yaml 修改 pod 的 RuntimeClass kubectl edit pod podname -n server ... metadata: namespace: server spec: runtimeClassName: untrusted containers: - name: foo image: janedoe/awesomeapp:v1 ... 验证 kubectl -n client exec podname -- dmesg | grep gVisor ❄ ServiceAccount 知识点文档：https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/configure-service-account 清单文件 /cks/sa/pod1.yaml 中指定的 Pod 由于 ServiceAccount 指定错误而无法调度。 在现有 namespace qa 中创建一个名为 backend-sa 的新 ServiceAccount，确保此 ServiceAccount 不自动挂载 API 凭据。 使用 /cks/sa/pod1.yaml 中的清单文件来创建一个Pod。 最后，清理 namespace qa 中任何未使用的 ServiceAccount。 # /cks/sa/pod1.yaml apiVersion: v1 kind: Pod metadata: name: backend namespace: qa spec: serviceAccountName: backend-sa containers: - image: nginx:1.9 imagePullPolicy: IfNotPresent name: backend apiVersion: v1 kind: ServiceAccount metadata: name: backend-sa namespace: qa automountServiceAccountToken: false #不自动挂载API --- apiVersion: v1 kind: Pod metadata: name: backend namespace: qa spec: serviceAccountName: backend-sa #给pod配置serviceaccount containers: - image: nginx:1.9 imagePullPolicy: IfNotPresent name: backend # 查看所有sa kubectl get sa -n qa # 查看已经被使用的sa kubectl get pod -n qa -o yaml | grep -i serviceaccount # 删除不用的sa kubectl delete sa -n qa test01 ❄ TLS通信配置 知识点文档：https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/ 修改 apiserver 通过 TLS 加强 kube-apiserver 安全配置，要求 kube-apiserver 除了 TLS 1.3 及以上的版本可以使用，其他版本都不…

CKA 考题
type: item
date: 2025-02-08T00:18:00+08:00
description: ☀ 获取信息 列出状态为运行，命名空间为 kube-system 的 pods kubectl get pods --field-selector=status.phase=Running -n kube-system 列出所有 pv 并以 name 字段排序 kubectl get pv --sort-by=.metadata.name 列出所有 pv 并以容量排序，并输出到指定文件 kubectl get pv -A --sort-by={.spec.capacity.storage} > xxx.txt 列出指定 pod 的日志中状态为 Error 的行，并记录在指定的文件上 kubectl logs <podname> | grep Error > xxx.txt 列出 Service 名为 test 下的 pod，并找出使用 CPU 使用率最高的一个，将 pod 名称写入文件中 kubectl get svc test --show-labels kubectl get pod -l app=xxx kubectl top pod # 手动写入文件 列出可用节点，不包含不可调度的 和 NoReachable 的节点，并把数字写入到文件里 kubectl get nodes # 数了手动写入文件 ☀ 创建并调度 pod 1 创建一个 pod，名为 nginx，并将其调度到有 disktype=ssd 标签的节点上 https://kubernetes.io/zh-cn/docs/tasks/configure-pod-container/assign-pods-nodes/ apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeSelector: disktype: ssd ☀ 创建并调度 pod 2 创建一个 pod，名为 nginx，并将其调度到名为 foo-node 的节点上 apiVersion: v1 kind: Pod metadata: name: nginx spec: nodeName: foo-node containers: - name: nginx image: nginx ☀ 创建多容器 pod 在命名空间 cka 内创建一个 pod，名为 podx4，内含四个指定的镜像 nginx、``redis、memcached、busybox` apiVersion: v1 kind: Pod metadata: name: podx4 namespace: cka spec: containers: - name: nginx image: nginx - name: redis image: redis - name: memcached image: memcached - name: busybox image: busybox ☀ 创建带存储 pod 创建一个 pod，名为 pod-npv，镜像为 nginx 创建 non-Persistent 类型 Volume，名为 cache-volume，挂载在 /data 目录 apiVersion: v1 kind: Pod metadata: name: pod-npv spec: containers: - name: nginx image: nginx volumeMounts: - name: cache-volume mountPath: /data volumes: - name: cache-volume emptyDir: {} ☀ 创建关联服务 pod 创建一个 Pod，名为 nginx-app，镜像为 nginx，并根据 pod 创建名为 nginx-app 的 Service，type 为 NodePort --- apiVersion: v1 kind: Pod metadata: name: nginx-app labels: run: nginx-app spec: containers: - name: nginx image: nginx --- apiVersion: v1 kind: Service metadata: name: nginx-app spec: selector: run: nginx-app ports: - name: http protocol: TCP port: 80 - name: https protocol: TCP port: 443 type: NodePort ☀ 创建包含 Init 容器的 Pod 创建一个 pod 的 yaml，…

Kubernetes
type: item
date: 2025-02-03T02:56:00+08:00
description: ☀ 安装部署 ★☀❄❂✪☁ 系统信息 操作系统：CentOS 7/8/9 x64 kubernetes: v1.23.14 docker-ce: v20.10.7 系统调整 # 停止防火墙 systemctl stop firewalld # 禁用防火墙 systemctl disable firewalld # 停止SELinux setenforce 0 # 禁用SELinux sed -i.bak -e 's|^SELINUX=.*|SELINUX=disabled|' /etc/selinux/config # 卸载swap swapoff -a # 禁用swap sed -i.bak -e 's|^[^#].*swap|#&|' /etc/fstab # 时间同步 (sudo crontab -l;echo "@reboot chronyc -a makestep") | sudo crontab (sudo crontab -l;echo "23 * * * * chronyc -a makestep") | sudo crontab 内核调整 将桥接的IPv4流量传递到iptables的链 cat > /etc/sysctl.d/kubernetes.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl -p /etc/sysctl.d/kubernetes.conf 容器运行时 dockershim 安装Docker-CE # 安装必要的一些系统工具 yum install -y yum-utils device-mapper-persistent-data lvm2 # 添加docker-ce官方源 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 修改为docker-ce清华源 sed -i.bak 's|^baseurl=https://download.docker.com|baseurl=https://mirrors.tuna.tsinghua.edu.cn/docker-ce|g' /etc/yum.repos.d/docker-ce.repo # 安装指定版本docker-ce # CentOS 7 yum install -y docker-ce-20.10.7-3.el7.x86_64 # CentOS 9 yum install -y docker-ce-20.10.21-3.el9.x86_64 # 启用docker服务 systemctl enable docker&& systemctl start docker docker 非root运行 如果要使用 Docker 作为非 root 用户，则应考虑使用类似以下方式将用户添加到 docker 组： usermod -aG docker your-user [可选]配置docker镜像仓库源 # docker镜像仓库源 # 配置 kubelet 使用的 cgroup 驱动程序 cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"] "registry-mirrors": ["https://hub.c.163.com/","https://mirror.baidubce.com/"] } EOF # 启用镜像仓库源配置 systemctl daemon-reload systemctl restart docker cri-docker # 安装 libcgroup https://rpmfind.net/linux/rpm2html/search.php?query=libcgroup(x86-64) https://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libcgroup-0.41-19.el8.x86_64.rpm https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/libcgroup-0.41-21.el7.x86_64.rpm # 安装cri-docker https://github.com/Mirantis/cri-dockerd/releases/tag/v0.3.8 https://gi…