Kubernetes生产实践系列之四:在Kubernetes运行带Desktop的Ubuntu容器

从零搭建K8s集群:Docker容器化与Kubernetes部署实战指南 如果你是一名运维工程师、开发人员,或者正在向云计算转型的技术人,最近是否被“云原生”、“容器化”、“微服务”这些词反复轰炸,却感觉它们离自己的日常工作很远?你是否尝试过学习 Docker 和 Kubernetes,但被复杂的网络模型、YAML 配置和各种抽象概念劝退,感觉看了一堆教程,还是无法在自己的项目里真正用起来? 问题不在于技术本身,而在于学习路径。很多教程要么停留在 docker run hello-world ,要么直接跳入复杂的生产级 K8s 集群部署,中间缺少了最关键的一环: 如何将容器技术平 阅读详情

 

一、前言

在文章《Kubernetes生产实践系列之二:在Kubernetes使用kubevirt运行管理Ubuntu/Windows桌面操作系统》中,我们部署来虚拟机并提供桌面来向Kubernetes的用户提供带桌面的运行环境,这种用受Kubernetets管理虚拟机来部署桌面的方式一方面对于Kubernetets节点的虚拟化提出要去,另外方面,也是比较重的解决方案。本文介绍通过容器运行Ubuntu Desktop并通过Kubernetets进行部署提供桌面运行环境的方案。

转载自https://blog.youkuaiyun.com/cloudvtech

二、获取代码

获取带桌面的ubuntu docker镜像代码

git clone https://github.com/fcwu/docker-ubuntu-vnc-desktop.git
cd docker-ubuntu-vnc-desktop-master/

获取依赖软件

wget https://github.com/krallin/tini/releases/download/v0.18.0/tini
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz

获取noVNC和websockify

cd web/static
git clone https://github.com/novnc/noVNC.git
git clone https://github.com/novnc/websockify.git

转载自https://blog.youkuaiyun.com/cloudvtech

三、构建镜像并运行docker

3.1 修正Dockerfile

################################################################################

# base system

################################################################################

FROM ubuntu:16.04

 

#ARG localbuild

#RUN echo "LOCALBUILD=$localbuild"

#RUN rm -rf /var/lib/apt/lists/partial

#RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi

 

RUN \

    sh -c "echo 'deb http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04/ /' >> /etc/apt/sources.list.d/arc-theme.list"

 

# && add-apt-repository ppa:fcwu-tw/apps  x11vnc

# built-in packages

RUN apt-get update \

    && apt-get install -y --no-install-recommends apt-utils  software-properties-common curl apache2-utils \

    && apt-get update \

    && apt-get install -y --no-install-recommends --allow-unauthenticated \

        supervisor nginx sudo vim-tiny net-tools zenity xz-utils \

        dbus-x11 x11-utils alsa-utils \

        mesa-utils libgl1-mesa-dri \

        lxde xvfb x11vnc \

        gtk2-engines-murrine gnome-themes-standard gtk2-engines-pixbuf gtk2-engines-murrine arc-theme \

        firefox chromium-browser \

        ttf-ubuntu-font-family ttf-wqy-zenhei apt-utils \

    && add-apt-repository -r ppa:fcwu-tw/apps \

    && apt-get autoclean \

    && apt-get autoremove \

    && rm -rf /var/lib/apt/lists/*

# Additional packages require ~600MB

# libreoffice  pinta language-pack-zh-hant language-pack-gnome-zh-hant firefox-locale-zh-hant libreoffice-l10n-zh-tw

 

# tini for subreap

ARG TINI_VERSION=v0.18.0

#ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /bin/tini

RUN \

   curl https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini -o /bin/tini && \

   chmod +x /bin/tini

 

# ffmpeg

#RUN mkdir -p /usr/local/ffmpeg \

#    && curl -sSL https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz | tar xJvf - -C /usr/local/ffmpeg/ --strip 1

 

ADD ffmpeg-release-64bit-static.tar.xz /usr/local/ffmpeg

#RUN mkdir -p /usr/local/ffmpeg && \

    #curl -o ffmpeg-release-64bit-static.tar.xz https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-64bit-static.tar.xz && \

#    tar xJvf /tmp/ffmpeg-release-64bit-static.tar.xz - -C /usr/local/ffmpeg/ --strip 1

 

# python library

COPY image/usr/local/lib/web/backend/requirements.txt /tmp/

RUN apt-get update \

    && dpkg-query -W -f='${Package}\n' > /tmp/a.txt \

    && apt-get install -y python-pip python-dev build-essential \

    && pip install setuptools wheel && pip install -r /tmp/requirements.txt \

    && dpkg-query -W -f='${Package}\n' > /tmp/b.txt \

    && apt-get remove -y `diff --changed-group-format='%>' --unchanged-group-format='' /tmp/a.txt /tmp/b.txt | xargs` \

    && apt-get autoclean -y \

    && apt-get autoremove -y \

    && rm -rf /var/lib/apt/lists/* \

    && rm -rf /var/cache/apt/* /tmp/a.txt /tmp/b.txt

 

 

################################################################################

# builder

################################################################################

#FROM ubuntu:16.04 as builder

 

#ARG localbuild

#RUN if [ "x$localbuild" != "x" ]; then sed -i 's#http://archive.ubuntu.com/#http://tw.archive.ubuntu.com/#' /etc/apt/sources.list; fi

 

RUN apt-get update \

    && apt-get install -y --no-install-recommends curl ca-certificates

 

# nodejs

#RUN rm -rf /var/lib/apt/lists/partia && curl -sL https://deb.nodesource.com/setup_8.x | bash - \

#    && apt-cache policy nodejs && apt-get install -y nodejs

RUN rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/partia && apt-get clean

#RUN echo "deb http://deb.nodesource.com/node_11.x xenial main" >> /etc/apt/sources.list.d/node.list

#RUN echo "deb-src http://deb.nodesource.com/node_11.x xenial main" >> /etc/apt/sources.list.d/node.list

RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -

RUN curl -sL http://deb.nodesource.com/setup_8.x |  bash -

#RUN curl -s http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04/Release.key | apt-key add -

RUN rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/partia && apt-get clean

RUN apt-get update

RUN apt-get install -y nodejs

 

# yarn

#RUN curl -s http://download.opensuse.org/repositories/home:/Horst3180/xUbuntu_16.04/Release.key | apt-key add -

RUN apt-get install -y apt-transport-https

#RUN rm -rf /var/lib/apt/lists/partial

#RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \

RUN curl -o pubkey.gpg  https://dl.yarnpkg.com/debian/pubkey.gpg  && apt-key add pubkey.gpg \

    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \

    && apt-get update \

    && apt-get install -y yarn

 

#RUN rm -rf /var/lib/apt/lists/partia && curl -sL https://deb.nodesource.com/setup_8.x | bash - \                                                        #    && apt-cache policy nodejs && apt-get install -y nodejs

 

# build frontend

#RUN echo

COPY web /src/web

RUN nodejs -v && cd /src/web \

    && yarn \

    && npm run build

 

 

################################################################################

# merge

################################################################################

#FROM system

 

#COPY --from=builder /src/web/dist/ /usr/local/lib/web/frontend/

RUN mkdir -p /usr/local/lib/web && cp -a /src/web/dist /usr/local/lib/web/frontend

#&& cp -ar /src/web/static/* /usr/local/lib/web/frontend/static/

#RUN cp -a /usr/local/lib/web/frontend/static/noVNC /usr/local/lib/web/frontend/static/novnc

COPY image /

ADD tini /bin/

RUN chmod a+x /bin/tini

 

EXPOSE 80

WORKDIR /root

ENV HOME=/home/ubuntu \

    SHELL=/bin/bash

HEALTHCHECK --interval=30s --timeout=5s CMD curl --fail http://127.0.0.1:6079/api/health

ENTRYPOINT ["/startup.sh”]

3.2 构建镜像

docker build -t ubuntu_desktop_base -f Dockerfile .

3.3 运行容器并且访问VNC桌面

docker run -dt --rm -p 8080:80 ubuntu_desktop_base 

access: http://172.3.0.3:8080/

转载自https://blog.youkuaiyun.com/cloudvtech

 

四、在Kubernetes部署

参考:https://github.com/ConSol/docker-headless-vnc-container

deployment.yaml文件

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: headless-vnc
  labels:
    application: headless-vnc
spec:
  # 1 Pods should exist at all times.
  replicas: 1
  template:
    metadata:
      labels:
        application: headless-vnc
    spec:
      terminationGracePeriodSeconds: 5
      containers:
      - name: headless-vnc
        image: consol/centos-xfce-vnc
        imagePullPolicy: Always
        args:
          ### make normal UI startup to connect via: oc rsh <pod-name> bash
          #- '--tail-log'
        ### checks that vnc server is up and running
        livenessProbe:
          tcpSocket:
            port: 5901
          initialDelaySeconds: 1
          timeoutSeconds: 1
        ### checks if http-vnc connection is working
        readinessProbe:
          httpGet:
            path: /
            port: 6901
            scheme: HTTP
          initialDelaySeconds: 1
          timeoutSeconds: 1

service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    application: headless-vnc
  name: headless-vnc
spec:
  externalName: headless-vnc
  ports:
  - name: http-port-tcp
    protocol: TCP
    port: 6901
    targetPort: 6901
    nodePort: 32001
  - name: vnc-port-tcp
    protocol: TCP
    port: 5901
    targetPort: 5901
    nodePort: 32002
  selector:
    application: headless-vnc
  type: NodePort
# Use type loadbalancer if needed
#  type: LoadBalancer

进行部署

kubectl apply -f  kubernetes/kubernetes.headless-vnc.example.deployment.yaml

[root@k8s-node-01 docker-headless-vnc-container]# kubectl get pods --output=wide -n docker-gui
NAME                            READY     STATUS    RESTARTS   AGE       IP               NODE          NOMINATED NODE
headless-vnc-57d7d99b74-drbrf   1/1       Running   0          6m        10.244.127.245   k8s-node-04   <none>

通过nodePort进行访问

http://172.2.2.14:32001/?password=vncpassword

 

 

 

 

 

转载自https://blog.youkuaiyun.com/cloudvtech

 

 

 

 

从Docker到Kubernetes:容器化与编排实战入门指南 在实际的云计算和容器化部署场景中,Docker 和 Kubernetes 已经成为构建、交付和运行现代应用的标准技术栈。对于希望从零开始掌握 Linux 云计算运维核心技术的开发者或运维工程师而言,理解从容器化到容器编排的完整链路,是提升工程效率和系统稳定性的关键。本文旨在提供一个结构化的学习路径和实战指南,帮助你从基础概念入手,逐步搭建环境、运行容器、部署集群,最终理解生产环境中常见的配置、排错和优化实践。无论你是刚接触容器技术的新手,还是希望系统化巩固知识的实践者,都可以跟随本文的步骤,构建一个可运行、 阅读详情

相关推荐

【Ubuntu2404】Ubuntu24.04下Docker Desktop的安装与配置全指南

本文提供了在Ubuntu 24.04系统上安装与配置Docker Desktop的完整指南。详细介绍了从系统准备、添加官方仓库、执行安装到关键权限设置的全过程,并深入讲解了资源分配、镜像加速器配置等核心功能,帮助开发者和运维新手快速搭建高效的图形化容器管理环境,显著提升本地开发和测试效率。

weixin_29230773的博客 658

kubernetes部署-基于docker desktop

kubernetes部署-基于docker desktop零、安装前准备工作一、安装docker二、根据版本下载k8s需要的images三、调整资源供k8s使用四、切换context五、开启k8s六、验证安装成功七、基于minikube部署k8s八、部署一个简单的pod,并验证 转载请注明出处即可 所使用的环境为macos 零、安装前准备工作 ##(1) 安装brew brew 执行以下指令安装 /bin/bash -c "$(curl -fsSL https://raw.githubuserconten

a360079162的博客 3033

docker.desktop,一个强大的跨平台的图形化容器管理工具

Docker Desktop是跨平台图形化容器管理工具,支持多系统,集成多种功能。介绍了其安装(Windows需先装WSL2,Linux用阿里云仓库)、启动、使用、配置代理、CLI管理及故障诊断方法。

tornadoami的博客 2146

Docker Desktop 启用Kubernetes失败解决办法

docker desktop 启用kubernetes失败

ttaannkkee的博客 1万+

从Docker容器到K8s编排:云原生应用部署与管理的核心实践

容器技术通过标准化封装应用及其依赖,实现了环境一致性与快速部署,解决了开发与运维中的环境差异难题。其核心原理基于操作系统层面的资源隔离,相比传统虚拟机更为轻量高效。这一技术为微服务架构提供了天然载体,显著提升了资源利用率和部署效率。随着应用规模扩大,单一容器管理演变为对容器集群的自动化编排需求,这正是容器编排平台的价值所在。在实际工程中,Docker负责构建和运行单个容器,而Kubernetes则作为集群的调度中心,管理着容器的部署、扩缩容、服务发现与自愈。本文通过Docker与Kubernetes的协同解

weixin_30521161的博客 399

Windows环境下清华ChatGLM3+docker-desktop镜像制作和配置GPU环境docker容器本地运行

如下,设置python的版本,设置工作目录,将5000端口暴露,安装环境。博主在此是将Chatglm3的主要文件单独拿出来,请忽略static文件夹、templates文件夹和下面的py文件,这是博主用flask写的网页应用,一般只需要static上面的文件夹即可,使用web_demo.py文件来使用Chatglm3大语言模型。首先保证你的docker-desktop版本为最新版本,2024年以后得版本都可。拉取镜像,配置环境在此文就不多赘述。这里引用这位大佬的文章,讲的很详细。

weixin_46545036的博客 1394

探索Kubernetes for Docker Desktop:一款加速本地开发的利器

探索Kubernetes for Docker Desktop:一款加速本地开发的利器 去发现同类优质开源项目:https://gitcode.com/ 如果你是Docker Desktop的忠实用户,并且正在寻找一个简单易用的方式来在本地环境中尝试和测试Kubernetes,那么项目绝对值得你关注。该项目旨在将Kubernetes集成到Docker Desktop中,让你可以在本地环境中无缝地使...

gitblog_00005的博客 522

Docker与K8S从零到实战:容器编排、部署与故障排查指南

容器化技术已成为现代应用交付的基础,Docker通过镜像实现环境一致性,让应用从开发到生产保持相同行为;而Kubernetes(K8S)作为容器编排平台,则负责大规模Pod的调度、自愈与弹性伸缩。理解两者的关系与分工,是掌握云原生运维能力的关键。在工程实践中,从Linux基础操作、Docker镜像构建、Docker Compose多服务编排,再到K8S集群搭建、Deployment与Service资源管理,每一个环节都需要结合实际部署场景来加深理解。同时,生产环境中的K8S故障排查(如Pod异常、CPU T

weixin_34186128的博客 565

Docker 容器入门就是这么简单

Docker容器 (没有虚拟化安全,但是不占资源) -容器技术以及成为应用程序呢封装和交付的核心技术 -容器的核心技术 1)cgroups (control groups ) 资源管理 2)Namespace 进程隔离 3)selinux 安全 由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速\ 什么是docker .Docker是完整的一套容器管理系统 .Docker提供了一组...

Fay_Linux的博客 335

Docker与K8s实战:从零构建容器化应用部署与编排

最近两年,云计算和容器化技术已经从“加分项”变成了后端和运维工程师的“生存技能”。很多朋友想学,但一看到 Docker、K8s 那一堆概念和命令就头疼:镜像、容器、Pod、Service、Ingress…… 网上的教程要么太浅,只教几个命令;要么太深,直接从源码讲起,学完还是不知道怎么用到实际项目里。 这篇文章要解决的,就是这个问题。它不是一个简单的命令手册,而是一套从零到一的实战路径。我会带你理解,为什么在 2026 年的今天,掌握 Docker 和 K8s 依然是构建现代应用交付能力的核心;更重要的是,

culuo8053的博客 451

K3s+Rancher Desktop本地K8s实战:让Todo应用真正可访问

Kubernetes本地开发的核心挑战并非概念理解,而是环境一致性、网络可达性与声明式配置的端到端贯通。本文聚焦K8s最小可行验证环,以K3s轻量控制平面和Rancher Desktop可视化运行时为基座,系统解决Pod跨层通信、StatefulSet持久化存储绑定、Ingress流量接入等高频落地难题。技术价值在于将复杂度收敛至开发者可感知、可调试、可复现的闭环——尤其适配Mac/Windows/Linux多平台下的本地开发与CI/CD预验证场景。全文围绕‘应用可访问性保障’与‘本地开发环境搭建’两大核心

weixin_30715523的博客 420

[kubernetes]-win11中通过docker desktop运行gpu容器

导语:在win11中docker desktop运行gpu容器。win11的话win版本肯定是符合的,win10的话有版本要求。

爷来辣的博客 603

Ubuntu零基础入门到精通【1.1讲】:什么是 Ubuntu?一文带你彻底搞懂!

🏆 本文收录于 《滚雪球学 Ubuntu》 专栏。 本专栏面向有一定计算机基础,但尚未系统学习 Linux / Ubuntu 的读者,采用“滚雪球式学习法”:先装好、再会用、再理解、再优化、再实战,带你从第一次进入 Ubuntu 桌面 / 终端开始,逐步掌握 Ubuntu 的日常使用、命令操作、软件安装、系统配置、开发环境搭建与服务器部署能力。

**My Coding Family** 5713

k8s部署从未如此简单:基于Ubuntu安装k8s1.34.0

k8s部署从未如此简单

qq_33174891的博客 1406

docker-headless-vnc-container:具有无头VNC环境的Docker映像集合

docker-headless-vnc-container:具有无头VNC环境的Docker映像集合

结构设计3D拆件与骨架模型构建实战:基于Creo 8.0的5个高效建模技巧

本文详细解析了基于Creo 8.0的结构设计3D拆件与骨架模型构建实战技巧,涵盖5个高效建模方法,包括参数化驱动、曲面分割、多实体协同设计等。通过骨架模型的智能应用,设计效率可提升30%以上,特别适合复杂产品的结构设计。文章还提供了TWS耳机充电仓等实战案例,帮助工程师快速掌握工业设计中的核心建模技术。

weixin_30000735的博客 569

Node.js容器化生产实践:从Dockerfile到Kubernetes就绪

容器化是现代Web服务交付的基础范式,其核心在于通过声明式配置实现环境一致性与运行时确定性。Node.js凭借事件驱动、轻量高效的特点,成为微服务与API网关的首选运行时;Docker则通过镜像分层、用户隔离、资源约束等机制,为Node.js提供可复现、可审计、可运维的执行边界。技术价值体现在消除'本地能跑,线上崩塌'的协作熵增,支撑CI/CD流水线稳定输出。典型应用场景包括云原生API服务、Serverless函数打包、Kubernetes集群部署及多平台(AMD64/ARM64)统一交付。本文聚焦Nod

weixin_34129696的博客 598

Word公式一键转MathType保姆级教程(附omml2mml.xsl报错终极解决方案)

本文提供Word公式一键转MathType的保姆级教程,重点解决常见的omml2mml.xsl报错问题。通过详细分析报错原因、官方解决方案实操步骤及转换后格式优化技巧,帮助用户高效完成公式转换,适用于科研论文和商业文档编辑。

weixin_30082367的博客 548

Docker与Kubernetes:从容器化到编排的完整实践指南

容器化技术是现代软件开发和部署的核心基础,它通过操作系统级别的虚拟化实现了应用环境的标准化与隔离。其核心原理在于利用Linux内核的命名空间和控制组技术,在共享主机内核的同时为每个应用提供独立的运行视图。这项技术的核心价值在于解决了“开发环境与生产环境不一致”的经典难题,实现了“一次构建,处处运行”的愿景,极大地提升了软件交付的效率和可靠性。在微服务架构和云原生实践中,容器化成为应用现代化和弹性伸缩的基石。基于容器技术,Docker提供了镜像构建和运行时管理的完整工具链,而Kubernetes则在此基础上实

weixin_34387468的博客 378

2D Nesting Defining a CSV File of Part Data

若。

qq_36560674的博客 1834

【ComfyUI专栏】ComfyUI 数字人方案-ComfyUI-EchoMimic

EchoMimic是一个基于图片和语音的数字人生成方案,通过ComfyUI节点实现。该方案安装简单,需下载特定模型文件(Unet、AudioProcessor和VAE)并保存本地。相比其他数字人生成方案,其节点操作更简便,支持多种Pose姿态选择,并能结合视频内容进行姿态同步,通过音频同步口型实现动态内容创建。生成的数字人效果直观,适用于快速创建个性化数字形象。

技术与管理的平衡木- 463

ubuntu20.04系统搭建k8s1.28集群-docker作为容器运行时

ls -l /run/cri-dockerd.sock #在run目录下的unix:///run/cri-dockerd.sock。mkdir -p /data/docker #这个目录最好是单独的分区,且容量大,可做rsync远程同步存储到nfs。ubuntu-22.04.5-desktop-amd64.iso映像文件--->实际却是20.4focal版本。#如果/etc/apt/source.list文件中已有,就不要再配置docker源了。passwd root 给root设置密码。

2401_84008551的博客 1411

如何设计提示词来减少 AI 的幻觉问题?

如何设计提示词来减少 AI 的幻觉问题?

我哎GIS博客 2467
上一篇: Kubernetes生产实践系列之三:使用noVNC连接在Kubernetes运行的Windows虚拟机
下一篇: 企业级负载均衡解决方案之十:微软Azure公有云负载均衡系统Ananta
cloudvtech
博客等级 码龄9年 533粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值