Ubuntu16.04多主机集群上手动部署Kubernetes,配置docker私有registry,配置Kubernetes-dashboard WEB ui

Okteto:让Kubernetes开发回归IDE本地体验的CLI工具 Kubernetes开发长期面临环境不一致、调试低效、反馈延迟等核心痛点。其本质是传统CI/CD流水线与本地开发工作流之间的语义鸿沟——开发者需要的是‘改保存即生效’的实时性,而非反复构建镜像与滚动部署。Okteto通过轻量级CLI驱动的双向文件同步、SPDY隧道封装和原地容器增强机制,在不模拟集群、不侵入K8s核心组件的前提下,将VS Code等本地IDE与远端Pod深度集成。它复用kubectl认证体系,兼容任意K8s发行版(包括kubekey搭建的Ubuntu 22.04高可用集群),并天然支持Spr 阅读详情

 

主要流程: 
- 部署etcd集群 
- 部署K8s Master 
- 配置flannel服务 
- 部署K8s Node 
- 部署DNS 
- 部署Dashboard


环境信息

项目版本
Etcd3.1.2
docker17.03.0-ce
flannelv0.7.0
Kubernetesv1.4.9

集群主机ip:

名称ipos
master10.107.20.5Ubuntu 16.04.2 LTS
node110.107.20.6Ubuntu 16.04.2 LTS
node210.107.20.7Ubuntu 16.04.2 LTS
node310.107.20.8Ubuntu 16.04.2 LTS
node410.107.20.9Ubuntu 16.04.2 LTS

每台主机上安装最新版Docker Engine,手工安装可参考博主其他博客。

部署etcd集群

我们将在5台主机上安装部署etcd集群

下载etcd

在部署机上下载etcd

ETCD_VERSION=${ETCD_VERSION:-"3.1.2"}
ETCD="etcd-v${ETCD_VERSION}-linux-amd64"
curl -L https://github.com/coreos/etcd/releases/download/v${ETCD_VERSION}/${ETCD}.tar.gz -o etcd.tar.gz

tar xzf etcd.tar.gz -C /tmp
cd /tmp/etcd-v${ETCD_VERSION}-linux-amd64

for h in master node1 node2 node3 node4; do ssh user@$h mkdir -p '$HOME/kube' && scp -r etcd* user@$h:~/kube; done
for h in master node1 node2 node3 node4; do ssh user@$h 'sudo mkdir -p /opt/bin && sudo mv $HOME/kube/* /opt/bin && rm -rf $home/kube/*'; done

可以手动到github上下载etcd release (https://github.com/coreos/etcd/releases/) 的.tar.gz包,解压。通过scp复制到 etcd 和etcdctl到各个主机(每台主机需要配置ssh,可参考博主其他博客)。然后复制到/opt/bin目录下。

配置etcd服务

在每台主机上,分别创建/opt/config/etcd.conf和/lib/systemd/system/etcd.service文件,(注意修改IP地址,和主机名) 
/opt/config/etcd.conf

sudo mkdir -p /var/lib/etcd/
sudo mkdir -p /opt/config/
sudo  cat <<EOF |  sudo tee /opt/config/etcd.conf
ETCD_DATA_DIR=/var/lib/etcd
ETCD_NAME=etcd5
ETCD_INITIAL_CLUSTER=etcd5=http://10.107.20.5:2380,etcd6=http://10.107.20.6:2380,etcd7=http://10.107.20.7:2380,etcd8=http://10.107.20.8:2380,etcd9=http://10.107.20.9:2380
ETCD_INITIAL_CLUSTER_STATE=new
ETCD_LISTEN_PEER_URLS=http://10.107.20.5:2380
ETCD_INITIAL_ADVERTISE_PEER_URLS=http://10.107.20.5:2380
ETCD_ADVERTISE_CLIENT_URLS=http://10.107.20.5:2379
ETCD_LISTEN_CLIENT_URLS=http://10.107.20.5:2379,http://127.0.0.1:2379
GOMAXPROCS=$(nproc)
EOF

此处五台主机的ETCD_NAME为etcd 5-9,可修改ETCD_NAME为自己起得名字(相应的ETCD_INITIAL_CLUSTER中对应五个名字)。每台主机上修改ETCD_LISTEN_PEER_URLS、ETCD_INITIAL_ADVERTISE_PEER_URLS、ETCD_ADVERTISE_CLIENT_URLS、ETCD_LISTEN_CLIENT_URLS为本机的ip。

/lib/systemd/system/etcd.service

[Unit]
Description=Etcd Server
Documentation=https://github.com/coreos/etcd
After=network.target


[Service]
User=root
Type=simple
EnvironmentFile=-/opt/config/etcd.conf
ExecStart=/opt/bin/etcd
Restart=on-failure
RestartSec=10s
LimitNOFILE=40000

[Install]
WantedBy=multi-user.target

然后在每台主机上运行如下命令,将etcd加入开机服务并启动

sudo systemctl daemon-reload 
sudo systemctl enable etcd
sudo systemctl start etcd

部署K8s Master

下载Flannel

FLANNEL_VERSION=${FLANNEL_VERSION:-"v0.7.0"}
curl -L https://github.com/coreos/flannel/releases/download/v${FLANNEL_VERSION}/flannel-${FLANNEL_VERSION}-linux-amd64.tar.gz flannel.tar.gz
tar xzf  flannel.tar.gz -C /tmp

如etcd一般,可手动到github上下载,解压。

下载K8s release包,并解压(https://github.com/kubernetes/kubernetes/releases)

复制程序文件

cd /tmp
scp kubernetes/server/bin/kube-apiserver \
     kubernetes/server/bin/kube-controller-manager \
     kubernetes/server/bin/kube-scheduler kubernetes/server/bin/kubelet kubernetes/server/bin/kube-proxy user@10.107.20.5:~/kube
scp flannel-${FLANNEL_VERSION}/flanneld user@10.107.20.5:~/kube
ssh -t user@10.107.20.5 'sudo mv ~/kube/* /opt/bin/'

将kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、flanneld复制到master主机。

创建证书

在master主机上 ,运行如下命令创建证书

mkdir -p /srv/kubernetes/

cd /srv/kubernetes

export MASTER_IP=10.107.20.5
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=${MASTER_IP}" -days 10000 -out ca.crt
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=${MASTER_IP}" -out server.csr
openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 10000 

配置kube-apiserver服务

我们使用如下的Service以及Flannel的网段:

SERVICE_CLUSTER_IP_RANGE=172.18.0.0/16

FLANNEL_NET=192.168.0.0/16

在master主机上,创建/lib/systemd/system/kube-apiserver.service文件,内容如下

[Unit]
Description=Kubernetes API Server
Documentation=https://github.com/kubernetes/kubernetes
After=network.target

[Service]
User=root
ExecStart=/opt/bin/kube-apiserver \
 --insecure-bind-address=0.0.0.0 \
 --insecure-port=8080 \
 --etcd-servers=http://10.107.20.5:2379, http://10.107.20.6:2379, http://10.107.20.7:2379, http://10.107.200
.8:2379, http://10.107.20.9:2379 \
 --logtostderr=true \
 --allow-privileged=false \
 --service-cluster-ip-range=172.18.0.0/16 \
 --admission-control=NamespaceLifecycle,LimitRanger,ServiceAccount,SecurityContextDeny,ResourceQuota \
 --service-node-port-range=30000-32767 \
 --advertise-address=10.107.20.5 \
 --client-ca-file=/srv/kubernetes/ca.crt \
 --tls-cert-file=/srv/kubernetes/server.crt \
 --tls-private-key-file=/srv/kubernetes/server.key
Restart=on-failure
Type=notify
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

–etcd_servers:指定etcd服务的URL;–insecure-bind-address:绑定主机的非安全地址,设置0.0.0.0表示绑定所有ip地址;–insecure-port:apiserver绑定主机的非安全端口号,默认为8080;–service-cluster-ip-range:Kubernetes集群中Service的虚拟ip地址范围,以CIDR格式表示,该ip范围不能与物理机的真实ip段有重合。

配置kube-controller-manager服务

在master主机上,创建/lib/systemd/system/kube-controller-manager.service文件,内容如下

[Unit]
Description=Kubernetes Controller Manager
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
ExecStart=/opt/bin/kube-controller-manager \
  --master=127.0.0.1:8080 \
  --root-ca-file=/srv/kubernetes/ca.crt \
  --service-account-private-key-file=/srv/kubernetes/server.key \
  --logtostderr=true
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

配置kuber-scheduler服务

在master主机上,创建/lib/systemd/system/kube-scheduler.service文件,内容如下

[Unit]
Description=Kubernetes Scheduler
Documentation=https://github.com/kubernetes/kubernetes

[Service]
User=root
ExecStart=/opt/bin/kube-scheduler \
  --logtostderr=true \
  --master=127.0.0.1:8080
Restart=on-failure
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target

在master主机上,创建/lib/systemd/system/flanneld.service文件,内容如下

配置flanneld服务

[Unit]
Description=Flanneld
Documentation=https://github.com/coreos/flannel
After=network.target
Before=docker.service

[Service]
User=root
ExecStart=/opt/bin/flanneld \
  --etcd-endpoints="http://10.107.20.5:2379" \
  --iface=10.107.20.5 \
  --ip-masq
Restart=on-failure
Type=notify
LimitNOFILE=65536

启动服务

/opt/bin/etcdctl --endpoints="http://10.107.20.5:2379,http://10.107.20.6:2379,http://10.107.20.7:2379,http://10.107.20.8:2379,http://10.107.20.9:2379" mk /coreos.com/network/config '{"Network":"192.168.0.0/16", "Backend": {"Type": "vxlan"}}'

sudo systemctl daemon-reload

sudo systemctl enable kube-apiserver
sudo systemctl enable kube-controller-manager
sudo systemctl enable kube-scheduler
sudo systemctl enable flanneld


sudo systemctl start kube-apiserver
sudo systemctl start kube-controller-manager
sudo systemctl start kube-scheduler
sudo systemctl start flanneld
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

修改Docker服务

source /run/flannel/subnet.env

sudo sed -i "s|^ExecStart=/usr/bin/dockerd -H fd://$|ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock --bip=${FLANNEL_SUBNET} --mtu=${FLANNEL_MTU}|g" /lib/systemd/system/docker.service
rc=0
ip link show docker0 >/dev/null 2>&1 || rc="$?"
if [[ "$rc" -eq "0" ]]; then
ip link set dev docker0 down
ip link delete docker0
fi


sudo systemctl daemon-reload
sudo systemctl enable docker
sudo systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

如果是手动安装的docker则需要去github上下载,docker.service和docker.socket文件到/lib/systemd/system/目录

部署K8s Node

复制程序文件

cd /tmp
for h in master node1 node2 node3 node4; do scp kubernetes/server/bin/kubelet kubernetes/server/bin/kube-proxy user@$h:~/kube; done
for h in master node1 node2 node3 node4; do scp flannel-${FLANNEL_VERSION}/flanneld user@$h:~/kube;done
for h in master node1 node2 node3 node4; do ssh -t user@$h 'sudo mkdir -p /opt/bin && sudo mv ~/kube/* /opt/bin/'; done
  • 1
  • 2
  • 3
  • 4

复制kube-proxy、kubelet到各节点。

配置Flanned以及修改Docker服务

参见Master部分相关步骤: 配置Flanneld服务,启动Flanneld服务,修改Docker服务。注意修改iface的地址

配置kubelet服务(在master上也配置kubelet和kube-proxy)

/lib/systemd/system/kubelet.service,注意修改–hostname-override的IP地址,改为各主机的ip

[Unit]
Description=Kubernetes Kubelet
After=docker.service
Requires=docker.service

[Service]
ExecStart=/opt/bin/kubelet \
  --hostname-override=10.107.20.5 \
  --api-servers=http://10.107.20.5:8080 \
  --logtostderr=true
Restart=on-failure
KillMode=process

[Install]
WantedBy=multi-user.target

启动服务

sudo systemctl daemon-reload
sudo systemctl enable kubelet
sudo systemctl start kubelet
  • 1
  • 2
  • 3

配置kube-proxy服务

/lib/systemd/system/kube-proxy.service,注意修改IP地址

[Unit]
Description=Kubernetes Proxy
After=network.target

[Service]
ExecStart=/opt/bin/kube-proxy  \
  --hostname-override=10.107.20.5 \
  --master=http://10.107.20.5:8080 \
  --logtostderr=true
Restart=on-failure

[Install]
WantedBy=multi-user.target

启动服务

sudo systemctl daemon-reload
sudo systemctl enable kube-proxy
sudo systemctl start kube-proxy

部署DNS

我们设置DNS_SERVER_IP=”172.18.8.8”;DNS_DOMAIN=”cluster.local”;DNS_REPLICAS=1 
在master上创建文件, skydns.yml

apiVersion: v1
kind: ReplicationController
metadata:
  name: kube-dns-v17.1
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    version: v17.1
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kube-dns
    version: v17.1
  template:
    metadata:
      labels:
        k8s-app: kube-dns
        version: v17.1
        kubernetes.io/cluster-service: "true"
    spec:
      containers:
      - name: kubedns
        image: 10.107.20.5:5000/mritd/kubedns-amd64
        resources:
          # TODO: Set memory limits when we've profiled the container for large
          # clusters, then set request = limit to keep this container in
          # guaranteed class. Currently, this container falls into the
          # "burstable" category so the kubelet doesn't backoff from restarting it.
          limits:
            cpu: 100m
            memory: 170Mi
          requests:
            cpu: 100m
            memory: 70Mi
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /readiness
            port: 8081
            scheme: HTTP
          # we poll on pod startup for the Kubernetes master service and
          # only setup the /readiness HTTP server once that's available.
          initialDelaySeconds: 30
          timeoutSeconds: 5
        args:
        # command = "/kube-dns"
        - --domain=cluster.local
        - --dns-port=10053
        - --kube-master-url=http://10.107.20.5:8080
        ports:
        - containerPort: 10053
          name: dns-local
          protocol: UDP
        - containerPort: 10053
          name: dns-tcp-local
          protocol: TCP
      - name: dnsmasq
        image: 10.107.20.5:5000/kube-dnsmasq-amd64
        args:
        - --cache-size=1000
        - --no-resolv
        - --server=127.0.0.1#10053
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
      - name: healthz
        image: 10.107.20.5:5000/exechealthz-amd64
        resources:
          # keep request = limit to keep this container in guaranteed class
          limits:
            cpu: 10m
            memory: 50Mi
          requests:
            cpu: 10m
            # Note that this container shouldn't really need 50Mi of memory. The
            # limits are set higher than expected pending investigation on #29688.
            # The extra memory was stolen from the kubedns container to keep the
            # net memory requested by the pod constant.
            memory: 50Mi
        args:
        - -cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
        - -port=8080
        - -quiet
        ports:
        - containerPort: 8080
          protocol: TCP
      dnsPolicy: Default  # Don't use cluster DNS.
---
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    kubernetes.io/name: "KubeDNS"
spec:
  selector:
    k8s-app: kube-dns
  clusterIP: 172.18.8.8
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP

创建pod和服务

kubectl create -f skydns.yml
  • 1

然后,修该各节点的kubelet.service,添加–cluster-dns=172.18.8.8以及–cluster-domain=cluster.local

此处可能出现问题,kubernetes在创建pod时,还通过启动一个名为google_containers/pause的镜像来实现pod的概念。离线环境需要先下载pause镜像。此处,笔者通过一台嫩够连接上Internet的电脑下载一个docker registry镜像,docker save -o 保存为tar包,拷贝到master主机,docker load 为本地镜像 
运行起来构建一个私有registry。从docker hub下载一个mritd/pause-amd64镜像,docker tag打上标签10.107.20.5:5000/mritd/pause-amd64,推到私有registry。 
之后,给每台Node的kubelet服务的启动参数加上–pod_infra_container_image参数,指定为私有Docker Registry中的pause镜像的地址。–pod_infra_container_image=10.107.20.5:5000/mritd/pause-amd64. 
来另外,kube-dns中庸用到的镜像(kubedns-amd64,kube-dnsmasq-amd64,exechealthz-amd64)也是离线下载推到私有registry中的。需要你自己手动完成这些操作。 
对于客户端对于私有docker registry不能拉取推送的问题。到客户端上配置/etc/docker/daemon.json.添加{“insecure-registries”:[“registry的ip:5000”]} 如 {“insecure-registries”:[“10.107.20.5:5000”]}。

部署Dashboard

在master上创建kube-dashboard.yml文件

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: kubernetes-dashboard
  template:
    metadata:
      labels:
        app: kubernetes-dashboard
      # Comment the following annotation if Dashboard must not be deployed on master
      annotations:
        scheduler.alpha.kubernetes.io/tolerations: |
          [
            {
              "key": "dedicated",
              "operator": "Equal",
              "value": "master",
              "effect": "NoSchedule"
            }
          ]
    spec:
      containers:
      - name: kubernetes-dashboard
        image: 10.107.20.5:5000/mritd/kubernetes-dashboard-amd64
        ports:
        - containerPort: 9090
          protocol: TCP
        args:
          - --apiserver-host=http://10.107.20.5:8080
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
---
kind: Service
apiVersion: v1
metadata:
  labels:
    app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 9090
  selector:
    app: kubernetes-dashboard

kubectl create -f kube-dashboard.yml 
参考dns的部署

查看kubectl describe -f kube-dashboard.yml pod被部署到了哪个节点,查看映射的端口。通过访问被部署到的节点的ip和port就可访问ui页面了。 
这里写图片描述

这里写图片描述

从Jupyter到生产:FastAPI+Docker+K8s+MLflow机器学习部署实战 机器学习模型部署不是简单加载pkl文件,而是涉及环境一致性、资源隔离、可观测性与生命周期管理的系统工程。其核心原理在于通过容器化封装依赖、声明式编排实现弹性伸缩、标准化模型注册保障可复现性,并以异步Web框架支撑高并发推理。该技术方案显著提升服务稳定性与迭代效率,广泛应用于金融风控、电商推荐等实时决策场景。本文聚焦FastAPI、Docker、Kubernetes和MLflow四大关键技术的协同落地,解决模型在真实生产环境中‘跑不稳、扩不动、查不清、换不了’的典型痛点。 阅读详情

相关推荐

Windows Docker加速与Portainer图形化管理实战指南

Docker镜像拉取慢、容器管理复杂,是Windows开发者高频痛点。其本质源于默认直连海外registry导致网络延迟高,以及原生CLI和Dashboard缺乏可视化、权限控制与中文支持。通过配置国内镜像加速器(如网易、百度源)可将pull速度提升8倍以上;结合Portainer CE的Agent模式部署,能实现容器、网络、卷的Web化纳管,并原生支持中文界面与RBAC。该方案兼顾开发效率与生产稳定性,适用于本地多服务联调、小团队测试环境搭建及非运维背景技术人员快速上手,是Windows下Docker工程

weixin_30667649的博客 424

postgresql16配置主从

【代码】postgresql16配置主从。

无效的博客 1871

Windows WSL2 原生 Docker 替代 Docker Desktop 实践

Docker 是容器化技术的核心运行时,其稳定性直接决定本地开发效率。在 Windows 平台,Docker Desktop 虽提供图形界面与一键集成,但因深度耦合 WSL2、Hyper-V 及多层代理服务,常引发虚拟化检测失败、localhost 映射异常、资源配额幻觉等隐性故障。本文基于 WSL2 原生架构,详解如何通过直接部署 dockerd 与 docker-cli 组合,剥离黑盒管理层,实现更轻量、可验证、可脚本化的容器运行时。该方案显著提升 `docker run` 和 `docker-comp

weixin_30540691的博客 526

docker部署pgsql主从

基于docker容器的Postgresql 11.6主从复制搭建 及切换 环境 192.168.253.70 pg1 主库 192.168.253.71 pg2 从库 安装部署 主服务器 创建数据盘 [root@pg1 ~]# mkdir -p /home/postgresql/data 运行主库容器 docker run --name pg_test --restart=always -v /home/postgresql/data:/var/lib/postgresql/data -e

liuchao666888的博客 2226

Windows Docker镜像加速与Portainer可视化部署指南

Docker 是一种轻量级容器化技术,通过隔离进程和资源实现应用的可移植部署;其核心依赖 Docker Daemon(dockerd)与镜像仓库通信,而国内网络环境下默认直连 Docker Hub 常导致拉取超时、速度极低。镜像加速器通过配置 registry-mirrors 指向国内 CDN 镜像源(如阿里云),显著优化 DNS 解析、TLS 握手及分发带宽,是提升本地开发效率的基础手段;Portainer 则作为开源容器管理平台,提供 Web 可视化界面,降低 CLI 使用门槛。二者结合,构成 Wind

weixin_33841503的博客 421

OpenClaw本地AI管家安装指南:30分钟部署可操作的AI Agent

AI Agent(智能体)是具备自主性、目标导向与环境交互能力的程序实体,其核心价值在于脱离云端依赖,实现本地化、可审计、低延迟的自动化任务执行。相比LangChain或AutoGen等框架,OpenClaw通过Skill Registry机制、Docker+Ollama轻量栈和CLI可观测设计,真正打通了‘大模型能力’到‘桌面操作’的最后一公里。它支持WhatsApp/Telegram等常用通讯工具作为交互入口,能读取本地文件、调用Excel、访问Outlook邮箱,适用于HR事务处理、产品功能验证及多A

weixin_33782386的博客 418

一篇文章教会你在Ubuntu 16.04部署k8s

1.配置: 环境:ubuntu 16.04 节点: 192.168.25.174 master 192.168.25.176 node 2.系统设置 1)禁用swap swapoff -a 2)关闭防火墙 systemctl stop firewalld systemctl disable firewalld 3)禁用Selinux apt...

Tz.的博客 3807

Windows 11 23H2 下 Docker Desktop 安装排障全指南

Docker Desktop 是 Windows 上运行 Linux 容器的核心工具,其本质依赖 WSL2 虚拟化引擎与 Windows 内核协同工作。原理上,它并非原生 Windows 应用,而是通过 WSL2 提供的轻量级 Linux 内核启动 dockerd 守护进程,并经由命名管道实现跨系统通信。这一分层架构带来高性能优势,也导致安装失败常横跨 BIOS 虚拟化开关、Windows 功能启用、WSL2 内核版本(如 5.15.133.1)、发行版配置及 Docker Desktop 版本兼容性等多重

weixin_30387423的博客 573

k8s在Ubuntu上安装dashboard

上一节中已经实现了k8s的安装,由于命令行操作对于后期的管理不方便,所以在此安装k8s的dashboard。 1.下载dashboard的yaml文件 网上给的链接很多,有些是已经失效的,这里给出官方提供的链接: kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.3/aio/deploy/recommended.yaml 此时会在当前路径下得到yaml文件,打开yaml文件,添加nodeport

kay 1847

GitLab CI与DOKS生产级CI/CD流水线实战指南

CI/CD流水线是现代云原生应用交付的核心基础设施,其本质是将代码变更自动转化为可验证、可发布、可回滚的运行态服务。实现这一目标需兼顾Kubernetes集群稳定性、流水线安全性与开发者体验三重维度。GitLab CI凭借内置权限模型和MR深度集成,天然适配最小权限与审计合规要求;DigitalOcean Managed Kubernetes(DOKS)则通过托管控制平面、预置可观测组件与区域亲和部署,显著降低K8s运维复杂度。二者组合在真实交付中可将MTTD压缩至秒级、MTTI控制在分钟级,支撑灰度发布、

weixin_33675507的博客 394

机器学习管线实战指南:从MLflow到Kubeflow Pipelines的自动化部署

这次我们来看一个在工业界和学术界都越来越重要的概念:机器学习管线。它不是某个具体的开源工具,而是一套将机器学习项目从数据到模型再到服务的流程进行标准化、自动化的工程实践框架。对于任何希望将机器学习模型从实验环境稳定、高效地推向生产环境的团队或个人来说,理解并构建一条健壮的机器学习管线,是提升效率、保证模型质量、实现持续迭代的关键。 简单来说,机器学习管线解决了从原始数据输入到最终预测输出这个过程中,各个环节(如数据预处理、特征工程、模型训练、评估、部署)的手动、割裂和不可复现的问题。它的核心价值在于自动化、

weixin_34364071的博客 324

告别踩坑!Ubuntu24.04 基于 kubeadm 部署 Kubernetes 1.30 生产测试集群

本文系统介绍了Kubernetes(K8s)的发展历程和应用部署演进过程,从传统物理机部署到虚拟化时代最终到容器化部署。详细讲解了Kubernetes的核心特性,包括自动化部署、服务发现、存储编排等,并明确区分了Kubernetes与传统PaaS的差异。文章基于VMware+Ubuntu24.04环境,提供了从零搭建v1.30标准三节点集群的完整方案,包含系统配置、网络部署、节点管理等实用命令,特别针对常见问题如swap、镜像拉取等提供了解决方案,适合云原生初学者、CKA备考者和测试环境搭建者参考实践。

Augustsky12138的博客 521

【卫星语音通信】神经网络语音编解码算法:AudioDec

最新研究表明,通过深度学习模型对语音信号进行智能压缩与重建,可在12 kbps码率下实现48 kHz采样率的高保真语音还原,其主观音质评分(MOS)可达3.9分(满分4.27分),远超传统参数编码技术。这意味着未来卫星电话的通话质量有望达到CD级水准,而蜂窝网络的语音业务带宽需求可降低60%以上,为蜂窝和卫星网络中的大规模物联网语音交互铺平道路。它的诞生为神经音频编解码技术带来了一次重要升级,有助于让未来实时语音交互更流畅、更清晰,也让我们进一步体验到人工智能与音频信号处理结合所带来的创新可能性。

u011376987的博客 1473

Kubernetes 完整学习指南:架构解析与 kubeadm 集群部署

Kubernetes 是当下主流容器编排标准,本文系统梳理其起源与核心能力,拆解 Master-Worker 整体架构,详解 apiserver、etcd、kubelet 等核心组件作用。实操部分提供 kubeadm 完整集群部署流程,包含系统环境初始化、集群初始化、Calico 网络插件安装,同时补充节点删除、集群重建等运维操作。兼顾理论原理与落地实操,适合运维、云原生从业者从零学习,快速掌握 K8s 架构逻辑与生产集群搭建全流程。

2602_95508776的博客 652

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 442

同花顺客户端数据采集:Hook注入与内存解密实战

在金融量化领域,客户端数据采集是获取低延迟、高精度行情的关键技术路径。其底层涉及进程通信、内存加密、反调试等典型Windows逆向工程问题。理解API Hook原理与AES-CBC动态密钥派生机制,有助于突破传统HTTP爬虫在国产金融软件中的失效困境。该技术不依赖网络劫持,而聚焦于本地进程内函数拦截与运行时内存解析,具备离线、可控、合规等工程优势,广泛应用于Level2行情、逐笔委托、分笔成交等高频数据场景,是量化基础设施中‘端侧数据主权’的重要实现方式。

weixin_30496999的博客 859

Kubernetes 集群搭建全解:架构剖析与 kubeadm 生产级部署实战

Kubernetes(K8s)是用于自动化部署、管理和扩展容器化应用的开源系统。文章首先回顾了应用部署的演进:从传统物理服务器部署的资源分配问题,到虚拟化部署的资源隔离优化,再到容器化部署的轻量级特性与跨平台优势。随后详细介绍了Kubernetes的核心特性,包括自动化运维、服务发现、存储编排、配置管理、自我修复等。最后解析了Kubernetes架构,包含控制平面组件(如API Server、调度器)、工作节点组件(如kubelet、kube-proxy)以及各类功能插件(如DNS、Dashboard)。K

qq_74180789的博客 423

价值投资/指标选股(akshare)

利用akshare的数据源,可以获取所有的股票数据以及公开的财务数据,可以进行条件筛选,获取满足条件的股票。 这套模板可以用于价值投资,指标选股。选股周期为日线级别。然后结果可以邮箱发送。 import time import akshare as ak ## A 股上市公司的实时行情数据 stock_zh_a_spot_df = ak.stock_zh_a_spot() #print(stock_zh_a_spot_df) ##取前300测试 ##取前300测试 df_stock =...

qq_26742269的博客 1万+

K8s 核心组件使用指南

Kubeadm是一个提供了和的工具, 作为创建Kubernetes集群的 “快捷途径” 的最佳实践。kubeadm通过执行必要的操作来启动和运行最小可用集群。按照设计,它只关注启动引导,而非配置机器。同样的, 安装各种 “锦上添花” 的扩展,例如 Kubernetes Dashboard、 监控方案、以及特定云平台的扩展,都不在讨论范围内。相反,k8s官方希望在kubeadm之上构建更高级别以及更加合规的工具, 理想情况下,使用kubeadm作为所有部署工作的基准将会更加易于创建一致性集群。

nRks5Qp11的博客 215

MATLAB 2026最新版免费下载安装教程:许可证激活与报错排查

科学计算与仿真在工程实践中扮演着核心角色,MATLAB 作为业界标准平台,凭借矩阵运算、数据可视化和 Simulink 仿真能力,成为高校课程设计与科研实验中的高频工具。理解其许可证机制是正确安装与持续使用的关键:官方提供试用版、学生版、家庭版及校园许可证等多种合法获取途径,安装包由引导器、工具箱文件与授权信息组成。掌握从下载到激活的完整流程,并根据操作系统进行环境配置与工具组件选装,不仅能规避安全风险,还能显著提升工程效率。针对安装过程中常见的许可证校验失败或工具箱不可用等问题,提供系统化排查思路与命令行

weixin_30702441的博客 2730

安卓端目标检测模型部署血泪史:从NCNN/TFLite/MNN全军覆没到Torchscipts终见光明

公司需在Android设备部署目标检测模型,要求: ✅ 实时检测速度≥15FPS ✅ 模型精度损失<5% ✅ 兼容中低端安卓设备👉 GitHub项目地址:pytorch/android-demo-app/ObjectDetection我已上传这份源码到csdn下载准备模型(必须走这步才能跑通安卓端源码)如果您没有设置PyTorch环境来运行该脚本,可以下载模型文件此处转到“android演示app/ObjectDetection/app/src/main/assets”文件夹,然后跳过此步骤的其余部分,直

机器学习、深度学习、强化学习、迁移学习 1577

测试工程师必学:从零搭建容器化测试环境实战指南

测试环境是软件测试工作的底层基石,其本质是可复现、可隔离、可验证的软硬件组合。理解Linux基础命令、Docker容器化原理与K8s编排逻辑,能有效解决环境漂移、服务耦合与资源污染等高频问题。容器化部署不仅提升测试效率,更直接支撑CI/CD流水线调试、接口/性能测试及云原生场景验证。当前93%的头部科技公司已全面采用Docker作为测试环境标准载体,而K8s正成为进阶能力分水岭。本指南聚焦真实工作流中的五类刚性需求——面试演示、入职即战、中间件版本控制、CI/CD协同与云平台适配,提供覆盖Windows/m

weixin_30699955的博客 388

13、核心网络模块:VyOS 设备配置实战

本文详细介绍了如何使用 Ansible 核心网络模块对 VyOS 虚拟设备进行自动化配置,涵盖环境搭建、变量设置、任务编写、playbook 运行及配置验证全过程。通过实际案例展示了 Ansible 在网络设备管理中的强大功能,包括多设备支持、模板化配置、备份回滚等优势,并提供了最佳实践建议与未来发展趋势分析,帮助读者提升网络运维效率。

linux6sysadmin的博客 114
上一篇: https://github.com/liuyi01/kubernetes-starterhttps://github.com/liuyi01/kubernetes-starter
下一篇: Shiro安全框架入门篇(登录验证实例详解与源码)
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值