K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

2023-10-29

文章目录

一、部署K8S集群方式

两种部署方式:

  1. kubeadm工具部署。Kubeadm 是一个K8s 部署工具,提供 kubeadm init 和kubeadm join,用于快速部署 Kubernetes集群。
    • kubeadm 工具功能:
      • kubeadm init:初始化一个 Master 节点。
      • kubeadm join:将工作节点加入集群。
      • kubeadm upgrade:升级 K8s 版本。
      • kubeadm token:管理 kubeadm join 使用的令牌。
      • kubeadm reset:清空 kubeadm init 或者 kubeadm join 对主机所做的任何更改。
      • kubeadm version:打印 kubeadm 版本。
      • kubeadm alpha:预览可用的新功能。
  2. 二进制包部署。从 github获取发行版的二进制包,手动依次部署每个组件组成Kubernetes 集群。可以先使用kubeadm工具部署,熟悉之后再进行二进制部署加深理解。

二、kubeadm工具搭建K8s集群

2.1 资源配置

注意事项:

  1. 服务器最好可以访问外网,会有从网上拉取镜像需求。若服务器不能上网,需提前下载对应镜像并导入节点。
节点 实验环境配置 测试环境配置 生产环境配置
master 2核CPU、2G内存、50G硬盘 2核CPU、4G内存、20G硬盘 8核CPU、16G内存、100G硬盘
node 2核CPU、2G内存、50G硬盘 4核CPU、8G内存、20G硬盘 16核CPU、64G内存、500G硬盘
软件环境 版本 备注
操作系统 CentOS Linux release 7.5.1804 (Core) CentOS 7.X系列版本都可,最好是最小化安装。
Docker 19-ce \
Kubernetes 1.25 \

2.2 服务器规划

IP 角色
192.168.130.145 K8S-master
192.168.130.146 K8s-node1
192.168.130.147 K8s-node2

在这里插入图片描述

2.3 搭建流程

2.3.1 操作系统初始化

  • 以下操作,所有服务器执行。

1.关闭所有服务器防火墙。

systemctl stop firewalld
systemctl disable firewalld

2.关闭所有服务器selinux。

#永久关闭,需重启服务器才能生效。
sed -i 's/enforcing/disabled/g' /etc/selinux/config   

#临时关闭,立即生效,重启服务器后还原配置。
setenforce 0

3.关闭所有服务器swap分区。

#永久关闭。
sed -ri 's/.*swap.*/#&/g' /etc/fstab

#临时关闭。
swapoff -a

4.根据规划设置主机名称。

hostnamectl set-hostname K8s-master
hostnamectl set-hostname K8s-node1
hostnamectl set-hostname K8s-node2

在这里插入图片描述
5.文件绑定解析。

cat >> /etc/hosts << EOF
192.168.130.145 k8s-master
192.168.130.146 k8s-node1
192.168.130.147 k8s-node2
EOF

6.将桥接的IPv4流量传递到iptables的链。

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

#重启生效。
sysctl --system

7.时间同步。

yum install ntpdate -y
ntpdate time.windows.com

2.3.2 安装docker容器引擎

  • K8s集群需要安装容器运行时,我这里使用的是docker作为容器引擎。
  • 其他主流容器引擎:
    • containerd:containerd最开始是在docker里面的,后面将docker进行解耦把containerd单独做成一个标准的CRI运行时,再往后就捐赠给了CNCF基金会交其维护,但docker一致是与containerd相兼容的。
    • cri-o、podman:都属于红帽(RedHat)项目,目前红帽主推podman。
  • 以下操作步骤,所有服务器执行。

1.安装docker环境。

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker

2.配置加速器。

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF

3.重启查看。

systemctl restart docker
docker info

在这里插入图片描述

4.添加阿里的镜像源。

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2.3.3 安装cri-dockerd

为什么要安装cri-dockerd插件?

  1. K8s在刚开源时没有自己的容器引擎,而当时docker非常火爆是容器的代表,所以就在kubelet的代码里集成了对接docker的代码——docker shim,所以1.24版本之前是默认使用docker,不需要安装cri-dockerd。
  2. K8s 1.24版本移除 docker-shim的代码,而 Docker Engine 默认又不支持CRI标准,因此二者默认无法再直接集成。为此,Mirantis 和 Docker 为了Docker Engine 提供一个能够支持到CRI规范的桥梁,就联合创建了cri-dockerd,从而能够让 Docker 作为K8s 容器引擎。
    在这里插入图片描述
    在这里插入图片描述

为什么要移除docker shim?

  • K8s核心代码优化。
  • Docker内部调用链比较复杂,多层封装和调用,导致性能降低、提升故障率、不易排查。
  • Docker还会在宿主机创建网络规则、存储卷,也带来了安全隐患

注意事项:

  • 以下操作步骤,所有服务器执行。

1.下载安装。

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm
rpm -ivh cri-dockerd-0.3.1-3.el7.x86_64.rpm 

2.修改配置文件,重新读取。

vim  /usr/lib/systemd/system/cri-docker.service
#找到这行,添加路径。
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7

systemctl daemon-reload

3.启动,并设置开机自启。

systemctl enable cri-docker && systemctl start cri-docker

2.3.4 安装kubeadm,kubelet和kubectl

  • 以下操作步骤,所有服务器执行。

1.安装三个工具,版本需要统一。

yum install -y kubelet-1.25.0 kubeadm-1.25.0 kubectl-1.25.0

2.设置开机自启,暂时不要启动。

systemctl enable kubelet

2.3.5 master节点初始化

1.master节点初始化。

参数释义:

  1. –apiserver-advertise-address 集群通告地址
  2. –image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
  3. –kubernetes-version K8s版本,与上面安装的一致
  4. –service-cidr 集群内部虚拟网络,Pod统一访问入口
  5. –pod-network-cidr Pod网络,,与下面部署的CNI网络组件yaml中保持一致。
  6. –cri-socket 指定 cri-dockerd 接口,如果是 containerd 则使用–cri-socketunix:///run/containerd/containerd.sock

注意事项:

  1. 初始化完成后,最后会输出一个 join 命令,复制下来,下面用。
kubeadm init \
  --apiserver-advertise-address=192.168.130.145 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.25.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

在这里插入图片描述
在这里插入图片描述

2.修改kubectl使用的连接k8s认证文件到默认路径,不然会报错。

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

3.查看工作节点,此时就可以使用kubectl命令了。

[root@k8s-master yum.repos.d]# kubectl get nodes

在这里插入图片描述

2.3.6 加入node节点

注意事项:

  • 向集群添加新节点,将前面执行kubeadm init 命令时最后输出的kubeadm join 命令复制过来,并手动加上参数–cri-socket=unix:///var/run/cri-dockerd.sock,再在命令行执行。
  • 默认token有效期为24小时,过期后,此token就不可用。这时就需要重新创建token,可以直接使用命令快捷生成:kubeadm token create --print-join-command

1.依次在所有node节点上执行加入集群命令。

[root@k8s-node1 yum.repos.d]# kubeadm join 192.168.130.145:6443 --token dxc3x4.ggvxomofqelw1g0l --discovery-token-ca-cert-hash sha256:e5b0a56b7c5108800a15b94bbdbde8ea47dc4c2e7c04973d34bf2280d65e80f1 --cri-socket=unix:///var/run/cri-dockerd.sock

[root@k8s-node2 yum.repos.d]# kubeadm join 192.168.130.145:6443 --token dxc3x4.ggvxomofqelw1g0l --discovery-token-ca-cert-hash sha256:e5b0a56b7c5108800a15b94bbdbde8ea47dc4c2e7c04973d34bf2280d65e80f1 --cri-socket=unix:///var/run/cri-dockerd.sock

在这里插入图片描述
2.查看集群状态,显示有新加入的2个节点。
在这里插入图片描述

2.3.7 部署网络组件(CNI)

不同docker主机容器访问存在的问题 :

  1. 存在两容器分配的ip相同问题,因为docker主机有各自对立的网络管理机制。
  2. 存在容器发送的数据包不知道要发送到那个节点问题。即使两个容器ip手动设置成不同,那容器1和容器2的网络也是不通的,是因为容器1发送的数据包不知道要送往哪个节点。
  3. 存在docker主机之间的通信问题。即使容器1知道要送往哪个节点,也只能通过手动方式去实现,比如路由表、iptables转发等等。
  4. 以上三个问题都是很耗时耗力的,所以需要引入网络组件来解决这些问题。

部署网络组件的原因?

  • 为打通Pod到Pod之间网络、Node与Pod之间网络,从而集群中数据包可以任意传输,形成了一个扁平化网络。

主流网络组件:

  1. Flannel
  2. Calico

注意事项:

  • 若导入yaml文件后一直处于pending状态,大概率是网络较差,可以手动下载镜像,再apply -f。
  • 以下操作在master节点执行。

1.下载文件到本地,文件下载地址

[root@k8s-master ~]# curl https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/calico.yaml -O

2.修改Calico配置文件里的定义Pod网络(CALICO_IPV4POOL_CIDR),与前面kubeadm init的 --pod-network-cidr指定一致。

[root@k8s-master ~]# vim calico.yaml
......
            - name: CALICO_IPV4POOL_CIDR
              value: "10.244.0.0/16"

在这里插入图片描述
3.将Calico文件部署到k8s集群中。

[root@k8s-master ~]# kubectl apply -f calico.yaml

4.查看Calico容器网络状态,拉取镜像需要等两分钟,有点慢。

[root@k8s-master ~]# kubectl get pods -n kube-system

在这里插入图片描述
在这里插入图片描述

2.3.8 部署 Dashboard

  • Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
  • 以下操作在master节点执行。

1.下载yaml文件。

[root@k8s-master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.4.0/aio/deploy/recommended.yaml

2.修改yaml文件内容。默认Dashboard只能集群内部访问,修改Service为NodePort类型,暴露到外部。

......
kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
      nodePort: 30001    ##添加此行。
  selector:
    k8s-app: kubernetes-dashboard
  type: NodePort   ##添加此行。
......

在这里插入图片描述
3.加载这个yaml文件,并查看容器运行状态。

[root@k8s-master ~]# kubectl apply -f recommended.yaml
[root@k8s-master ~]# kubectl get pods -n kubernetes-dashboard

在这里插入图片描述

2.3.9 访问Dashboard

1.访问k8s任意节点IP:30001,会发现被拦截了,这是因为chrome认为该网站不安全,不让访问,我们在当前页面随意处输入“thisisunsafe”回车即可解决,相当于了解了风险依然访问,之后就可以访问网页,但那之后再出问题也就没有责任了。
在这里插入图片描述

2.此时需要我们输入Token登录。

在这里插入图片描述
3.获取Token。创建service account并绑定默认cluster-admin管理员集群角色。

[root@k8s-master ~]# kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard

[root@k8s-master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin

[root@k8s-master ~]# kubectl create token dashboard-admin -n kubernetes-dashboard

在这里插入图片描述
4.粘贴Token,登录。
在这里插入图片描述
在这里插入图片描述

2.3.10 效果测试

2.3.10.1 创建pods

1.创建一个pods。
在这里插入图片描述
2.查看Pods。
在这里插入图片描述
3.也可以在终端上查看pods运行状态。
在这里插入图片描述

2.3.10.2 查看容器日志

在这里插入图片描述
在这里插入图片描述

2.3.10.3 查看yaml文件

在这里插入图片描述

在这里插入图片描述

2.3.10.4 进入容器终端

在这里插入图片描述

在这里插入图片描述

2.3.10.5 缩放资源

1.缩放。
在这里插入图片描述
2.查看Pods。
在这里插入图片描述
在这里插入图片描述

2.4 使用Containerd容器引擎

注意事项:

  1. containerd是一个主流的容器引擎,与Docker相兼容,相比Docker轻量很多,目前较为成熟。
  2. containerd是独立的运行时,一个集群可以有多个运行时,比如docker和containerd可以同时存在,但一般就是用一个,不建立交叉使用。
  3. 若是docker切换成containerd,则需要给一个集群所有节点都切换,以下操作只切换了master节点,只做示范。
  4. 不同运行时的镜像是通用的。

2.4.1 使用前提条件

1.启用两个内核模块。操作系统默认是有的,若没有,则执行代码框的内容进行添加启用。

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

在这里插入图片描述

2.设置sysctl 参数。若是第一次直接使用containerd,则需要把下面几个参数都要添加进去;若是docker切换成containerd,按照前文的操作,前两个参数已经添加,只需要确定添加最后一个参数。

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

#重启生效。
sysctl --system

2.4.2 安装containerd

1.安装。若是直接使用containerd,需要执行此步骤进行安装;若是由docker更换成containerd,则直接进行第二步,因为在前文安装docker时,已经把contained安装了。

yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
yum install -y containerd.io

在这里插入图片描述

2.创建配置文件目录。

#若是按照前文操作来的,已经生成该目录,且存在配置文件,不需在创建,只用执行第二个命令;若不是按照前文来操作的,需创建。
mkdir -p /etc/containerd  

在这里插入图片描述

2.4.3 修改containerd运行模式

1.修改containerd运行模式,以独立模式运行,也就是不需要安装docker就可以运行。

  • 修改前

在这里插入图片描述

  • 修改命令
containerd config default > /etc/containerd/config.toml
  • 修改后

在这里插入图片描述

2.4.4 修改containerd运行参数

修改containerd运行参数:

  • pause镜像设置过阿里云镜像仓库地址。
  • 拉取Docker Hub镜像配置加速地址设置为阿里云镜像仓库地址。

1.修改一

vi /etc/containerd/config.toml
......
    sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"  

在这里插入图片描述

2.修改二

vi /etc/containerd/config.toml
......
	[plugins."io.containerd.grpc.v1.cri".registry.mirrors]

#添加这两行。     
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
    endpoint = ["https://b9pmyelo.mirror.aliyuncs.com"]

在这里插入图片描述
3.重新读取。

systemctl restart containerd

2.4.5 配置kubelet使用containerd

1.查看文件路径。
在这里插入图片描述
2.修改配置文件里的路径,并重启服务。

[root@k8s-master containerd]# vim /var/lib/kubelet/kubeadm-flags.env

[root@k8s-master containerd]# systemctl  restart kubelet

在这里插入图片描述

2.4.6 验证

1.此时查看master节点已经采用containerd容器引擎。

[root@k8s-master containerd]# kubectl get node -o wide

在这里插入图片描述

2.此时关闭cri-docker和docker不影响containerd的运行使用。

在这里插入图片描述

2.4.7 容器管理工具

  • containerd提供了ctr命令行工具管理容器,但功能比较简单,所以一般会用crictl工具检查和调试容器。
  • 项目地址:https://github.com/kubernetes-sigs/cri-tools/

2.4.7.1 设置crictl连接containerd

1.不设置会报错。

在这里插入图片描述

2.指定使用containerd容器运行时的API接口。

[root@k8s-master containerd]# vim /etc/crictl.yaml

runtime-endpoint: unix:///run/containerd/containerd.sock  ##指定容器运行时的文件接口。
image-endpoint: unix:///run/containerd/containerd.sock    ##指定容器运行时管理镜像的接口。
timeout: 10   ##指定容器运行时的连接超时时间。
debug: false   ##是否输出debug信息。

2.4.7.2 验证

1.此时就可以正常使用crictl命令。
在这里插入图片描述

2.4.7.3 相关命令

镜像相关功能 docker containerd(crictl)
显示本地镜像列表 docker images crictl images
下载镜像 docker pull crictl pull
上传镜像 docker push 无,例如buildk
删除本地镜像 docker rmi crictl rmi
查看镜像详情 docker inspect IMAGE-ID crictl inspecti IMAGE-ID
容器相关功能 Docker containerd(crictl)
显示容器列表 docker ps crictl ps
创建容器 docker create crictl create
启动容器 docker start crictl start
停止容器 docker stop crictl stop
删除容器 docker rm crictl rm
查看容器详情 docker inspect crictl inspect
附加容器 docker attach crictl attach
执行命令 docker exec crictl exec
查看日志 docker logs crictl logs
查看容器资源 docker stats crictl stats
POD 相关功能 Docker containerd(crictl)
显示 POD 列表 crictl pods
查看 POD 详情 crictl inspectp
运行 POD crictl runp
停止 POD crictl stopp

三、kubectl命令行管理工具

3.1 基础命令

命令 释义
create 通过文件名或标准输入创建资源
expose 为Deployment,Pod创建Service
run 在集群中运行一个特定的镜像
set 在对象上设置特定的功能
explain 文档参考资料
get 显示一个或多个资源
edit 使用系统编辑器编辑一个资源。
delete 通过文件名、标准输入、资源名称或标签选择器来删除资源。

3.2 部署命令

命令 释义
rollout 管理Deployment,Daemonset资源的发布(例如状态、发布记录、回滚等)
scale 对Deployment、ReplicaSet、RC或Job资源扩容或缩容Pod数量
autoscale 为Deploy, RS, RC配置自动伸缩规则(依赖metrics-server和hpa)

3.3 集群管理命令

命令 释义
certificate 修改证书资源
cluster-info 显示集群信息
top 查看资源利用率(依赖metrics-server)
cordon 标记节点不可调度
uncordon 标记节点可调度
drain 驱逐节点上的应用,准备下线维护
taint 修改节点taint标记

3.4 调试命令

命令 释义
describe 显示资源详细信息
logs 查看Pod内容器日志,如果Pod有多个容器,-c参数指定容器名称
attach 附加到Pod内的一个容器
exec 在容器内执行命令
port-forward 为Pod创建本地端口映射
proxy 为Kubernetes API server创建代理
cp 拷贝文件或目录到容器中,或者从容器内向外拷贝
auth 检查授权
debug 创建调试会话,用于排查工作负载和工作节点故障

3.5 高级命令

命令 释义
diff 将在线配置与指定的文件对比
apply 从文件名或标准输入对资源创建/更新
patch 使用补丁方式修改、更新资源的某些字段
replace 从文件名或标准输入替换一个资源
kustomize 从目录或者URL构建kustomization目标

3.6 设置命令

命令 释义
label 给资源设置、更新标签
annotate 给资源设置、更新注解
completion kubectl 自动补全
1、安装依赖包bash-completion。
2、设置在bash中自动补全:source <(kubectl completion bash)

3.6 其他命令

命令 释义
api-resources 查看所有资源
api-versions 打印受支持的API版本
config 修改kubeconfig文件(用于访问API,比如配置认证信息)
version 查看kubectl和k8s版本

四、异常处理

4.1 其他节点无法使用kubectl命令

  • 问题:其他工作节点无法使用kubectl命令。

在这里插入图片描述
1.现在node节点上的/root目录下创建.kube目录。

[root@k8s-node1 ~]# mkdir .kube
[root@k8s-node2 ~]# mkdir .kube

2.把master节点上的.kube/config文件复制到其他工作节点同目录下。

[root@k8s-master ~]#  scp .kube/config root@192.168.130.146:/root/.kube/
[root@k8s-master ~]#  scp .kube/config root@192.168.130.147:/root/.kube/

3.此时node节点就可以使用kubectl命令了。
在这里插入图片描述

4.2 命令行的补全

  • kubectl命令默认不支持补全功能,我们可以把补全相关的内容写入到bash中,这里就需要linux中的bash补全包,其他工具的补全命令都需要这个命令。

1.安装依赖包,linux的mini版本是没有装的。

[root@k8s-master ~]# yum install -y bash-completion

[root@k8s-master ~]# bash

2.在 bash 中设置当前 shell 的自动补全,随后命令就可以补全,但重启机器就会失效。

[root@k8s-master ~]# source <(kubectl completion bash)

3.开机自启,永久生效。

[root@k8s-master ~]# echo "source <(kubectl completion bash)" >> ~/.bashrc
[root@k8s-master ~]# source .bashrc 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令 的相关文章

  • Ctrl-p 和 Ctrl-n 在 Docker 下表现异常

    For the life of me I can t seem to figure out why ctrl p and ctrl n don t work like they re supposed to under the Docker
  • php_network_getaddresses: getaddrinfo 失败: 名称或服务未知 (0) 连接失败..!

    我正在使用 php 邮件程序功能 但出现以下错误 如何修复它 2016 01 22 06 15 48 SMTP 错误 无法连接到服务器 php network getaddresses getaddrinfo失败 名称或服务未知 0 连接失
  • 为什么 call_usermodehelper 大多数时候都会失败?

    从内核模块中 我尝试使用 call usermodehelper 函数来执行可执行文件 sha1 该可执行文件将文件作为参数并将文件的 SHA1 哈希和写入另一个文件 名为输出 可执行文件完美运行 int result 1 name hom
  • 如何从 K8s API 获取 Kubernetes 集群名称

    如标题所述 是否可以从API中找到K8s集群名称 我查了一下 API 没有找到 kubectl config current context就可以了 它输出更多一点 比如项目名称 区域等 但它应该给你你需要的答案
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何配置手动预配的 Azure 托管磁盘以用作 Kubernetes 持久卷?

    我正在尝试运行Jenkins Helm 图表 https github com kubernetes charts tree master stable jenkins 作为此设置的一部分 我想传递我提前配置的持久卷 或者可能在迁移期间从另
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何通过不同的接口路由 TCP/IP 响应?

    我有两台机器 每台机器都有两个有效的网络接口 一个以太网接口eth0和 tun tap 接口gr0 目标是使用接口在机器 A 上启动 TCP 连接gr0但然后让机器 B 的响应 ACK 等 通过以太网接口返回 eth0 因此 机器 A 发出
  • GKE 上的 Ingress 仍处于“后端不健康”状态

    Given 一个运行 nginx 的简单 pod 节点端口服务 一个入口 当拨打电话时pod从集群内部我们得到 200 响应代码 当拨打电话时service从集群内部我们得到 200 响应代码 入口显示为注释 ingress kuberne
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • Kubernetes - 滚动更新杀死旧的 Pod,而不启动新的 Pod

    我目前正在使用 Deployments 来管理 K8S 集群中的 pod 我的一些部署需要 2 个 pod 副本 一些需要 3 个 pod 副本 还有一些只需要 1 个 pod 副本 我遇到的问题是只有一个 pod 副本 我的 YAML 文
  • kubectl:在 WSL 终端中找不到

    我按照以下说明在 Windows10 上安装了 WSL2 https learn microsoft com en us windows wsl install win10 https learn microsoft com en us w
  • Linux 中的 Windows NAmed Pipes 替代品

    我们正在将现有的 Windows 代码移植到 Linux 我们使用 ACE 作为抽象层 我们使用 Windows 命名管道与多个客户端进行通信并执行重叠操作 linux 下这个相当于什么 我检查了linux命名管道 FIFO 但它们似乎只支
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • SIGHUP 用于重新加载配置

    根据signal 7 SIGHUP用于检测控制终端的挂起或控制进程的死亡 然而 我遇到过很多 OSS 守护进程 服务 其中SIGHUP用于启动配置的重新加载 这里有一些例子 hostapd sshd snort etc 这是实现重新加载的标
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • X 按键/释放事件捕获,与焦点窗口无关

    我想记录所有传入的按键事件 无论哪个窗口处于焦点状态或指针位于何处 我编写了一个示例代码 它应该捕获当前焦点窗口的按键事件 include
  • 获取 Pod 处于挂起状态的平均时间

    我正在尝试使用 prometheus 计算 pod 在 grafana 中处于挂起状态的平均时间 我可以使用此查询生成一个图表 以获取一段时间内处于挂起状态的 Pod 数量 sum kube pod status phase phase P

随机推荐

  • 【202211】国内镜像源地址

    Ubuntu Python Nodejs MySQL Git Chromium Docker Homebrew 等一系列的常用最推荐的镜像源 清华源镜像清华大学开源软件镜像站 Tsinghua Open Source Mirror 可能是最
  • anguar12里面FormControl学习

    在Angular 12中 要动态修改FormGroup 你可以使用patchValue 方法或setValue 方法 使用patchValue 方法 import Component OnInit from angular core imp
  • java内部类的作用分析

    提起Java内部类 Inner Class 可能很多人不太熟悉 实际上类似的概念在C 里也有 那就是嵌套类 Nested Class 关于这两者的区别与联系 在下文中会有对比 内部类从表面上看 就是在类中又定义了一个类 下文会看到 内部类可
  • solidity数据位置

    代码在执行前 一般会编译成指令 指令就是一个个逻辑 逻辑操作的是数据 代码 或者说业务 操作的其实是数据 非区块链中 代码操作的数据 一般会存到数据库中 在区块链里 区块链本身就是一个数据库 如果你使用区块链标记物产的所有权 归属信息将会被
  • flutter 路由配置多种跳转与传参

    main dart文件 1 引入路由跳转的页面 import package app ftr pages Page1 dart import package app ftr pages Page2 dart void main gt run
  • 常见HTTP状态码

    HTTP状态码 当浏览者访问一个网页时 浏览器会向网页所在服务器发出请求 当浏览器接收并显示网页前 此网页所在的服务器会返回一个包含HTTP状态码的信息头 server header 用以响应浏览器的请求 HTTP状态码分类 HTTP状态码
  • 【react】组件创建和交互步骤和实例

    例子来自尚硅谷react视频 相当于笔记整理 link https www bilibili com video av51174155 from search seid 11218837597275325699 要做的功能 在输入框内输入内
  • Ubuntu系统中多个版本的程序指定默认版本

    最近在编译clickhouse的过程中 遇到了操作系统默认安装了一个clang 10的版本 但编译clickhouse需要安装11版本以上的clang程序 所以就通过命令 bash c wget O https apt llvm org l
  • 3D游戏编程 homework 2

    简答题 游戏对象运动的本质是什么 在游戏中一个对象的运动都是相对于某一个坐标系的运动 实质上就是坐标的改变 通过坐标改变的速度以及方法实现各种运动 请用三种方法以上方法 实现物体的抛物线运动 方法一 使用向量计算出每个时刻球应该在的位置 再
  • 1034 有理数四则运算

    1034 有理数四则运算 20 分 本题要求编写程序 计算 2 个有理数的和 差 积 商 输入格式 输入在一行中按照 a1 b1 a2 b2 的格式给出两个分数形式的有理数 其中分子和分母全是整型范围内的整数 负号只可能出现在分子前 分母不
  • 图像直方图均衡化算法理解

    一 直方图均衡化的图像原理 直方图均衡就是让照片的灰度分布拉宽 然后图像对比度变大则变的清晰 方图均衡化方法的基本思想是对在图像中像素个数多的灰度级进行展宽 而对像素个数少的灰度级进行缩减 从而达到清晰图像的目的 直方图 png 二 直方图
  • 6个位运算使用

    6个位运算使用 1 乘以2 2 快速计算2的n次幂 3 校验奇数还是偶数 4 交换两个变量 5 找出只出现一次的数 6 对数字加密 1 乘以2 int num 10 lt lt 1 System out println num 2 快速计算
  • Java基础七(重写与重载)

    Java基础七 重写与重载 1 重写 Override 存在于继承体系中 指子类实现了一个与父类在方法声明上完全相同的一个方法 为了满足里式替换原则 重写有以下三个限制 子类方法的访问权限必须大于等于父类方法 子类方法的返回类型必须是父类方
  • 前端技能三要素

    HTML CSS js是构建网页的三种主要技术 也被称为前端技能三要素 1 HTML 超文本标记语言 是一种使用标签 标记 描述网页的语言 结构层 是一种标记语言 2 CSS 层叠样式表 主要用于美化web页面外观 表现层 样式层 样式表语
  • 编写一个猜数字游戏程序。

    猜数字游戏的实现内容 1 电脑随机生成一个数字 1 100 2 玩家猜数字 如果玩家猜小了 就提示猜小了 如果玩家猜大了 就告提示大了 如果玩家猜对了 就提示猜对了 3 游戏每局结束后 可以选择是否继续玩或者退出 我们开始先做一个游戏主页菜
  • CGAL的64位开发环境配置

    第二次配置了 然而感觉似乎并没有占到先前一年前配置过一次的优势 从第0步就很坎坷也是醉醉的 cgal官网都进不去 不过都用最新软件配置成功还是很开心的 为此觉得写一个教程很有必要 造福后人吧 首先是VS015的安装 迷之尴尬 下载了下图这个
  • Springboot高级特性——缓存

    springboot的缓存可以让我们系统性能提升 比如每次查询数据库的时候 如果设置了缓存 那么第二次查询同一数据那便直接从缓存中取值 1 启动缓存 com quking springboot01cache Springboot01Cach
  • Qt在信号中如何发送自定义结构体,或者发送多个自定义参数

    昨天调试项目时 突然发现如下消息 QObject connect Cannot queue arguments of type ERROR LEVEL Make sure ERROR LEVEL is registered using qR
  • Linux 搭建jenkins

    安装jenkins 步骤 通过wget 获取对应的Jenkins rpm 包 基于rpm ivh 命令进行安装 第一步 下载jenkins rpm 工具包 wget https repo huaweicloud com jenkins re
  • K8s基础2——部署单Master节点K8s集群、切换containerd容器运行时、基本命令

    文章目录 一 部署K8S集群方式 二 kubeadm工具搭建K8s集群 2 1 资源配置 2 2 服务器规划 2 3 搭建流程 2 3 1 操作系统初始化 2 3 2 安装docker容器引擎 2 3 3 安装cri dockerd 2 3