在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

智匯華云 | kata container virtiofs測試和技術分析

話說科技 ? 2021-07-15 14:07 ? 次閱讀

poYBAGDv0KKAXd88AAEX3qjI5BA09.jpeg

云原生技術已經成為加快企業數字化轉型的一個不折不扣的風向標。而以容器為代表的云原生技術正在成為釋放云價值的最短路徑。本期智匯華云,帶大家一起了解和體驗安全容器kata container的?些特性。

前?

當前云原?技術發展的如?如荼,容器化技術以及kubernetes容器化應?管理平臺,帶來了全新的? 態系統. 隨著容器技術的發展,容器運?時規范OCI也逐漸脫離Docker被單獨提了出來,kubernetes?期使?的容器運?時是runC,輕量,性能?,但因為共?linux內核以及namespace機制隔離的不徹 底,存在?定的安全問題,業界涌現了好?個安全容器的解決?案,?如Google的gVisor, Amazon的 Firecracker,vmware的CRX等, 開源世界???較有名的解決?案是kata container,本?主要就關 注在安全容器kata container的?些特性了解和體驗。 kata Container

kata container 由?系列技術組成,來源于兩個項?的合并,Intel Clear Containers和Hyper runV,然 后?加上redhat貢獻的virtio-fs,?種在guest和宿主機之間共享?件系統的?案。涉及的技術有 QEMU/KVM,Linux kernel,?件系統,容器運?時,容器?絡等,是?項?較復雜的組合產品,? 且還保持著很?的新特性開發進度,本次主要體驗和梳理virtiofs相關的內容,這些內容有部分是來源 于kata的社區郵件列表以及slack,還有微信群,?常感慨,kata的社區真是?常的Nice,專業程度和 熱?都令?感動。

virtiofs ?件系統結構

默認容器是使?cgroup和namespace做進程,?絡,?件系統掛載點等隔離,是?常輕量級的。? kata container為了實現安全容器,使?了VM虛擬機作為強隔離?段,有獨?的內核和虛擬機鏡像, 為了降低資源消耗,hypervisor使?了?常?的guest kernel和guest image,?度優化了內核的啟動 時間,最?化了內存占?,只提供容器負載所需要的最基本的服務。virtio-fs?件系統,在資源消耗上 也使?了多種優化特性。 下?就來看?看具體是怎么使?的,以及特性理解 kata container作為除了runC之外另?種runtime,需要先在kubernetes環境中做集成部署,以便做各 種觀察。當然直接使?他的CTR?具也是可以,只是缺少CNI的?持,?絡??不能?動配置。kata container configuration.toml 配置參數有兩種共享?件系統類型可以選擇,之前默認是virtio-9p ,現 在基本上都會選擇 virtio-fs,有若?優點。 virtio- 9p 和 virtio-fs ?件系統對?

1. virtio-9p基于現存的?絡協議,并沒有虛擬化場景提供優化

2. virtio-fs利?了hypervisor和虛擬機處于相同節點的優勢

DAX特性,?件內容能夠映射到宿主機的內存窗?,允許客戶機直接訪問宿主機的page cache

減少內存占?,因為客戶機cache已經被繞過了

不需要?絡節點通信,提?了IO性能

測試

kata container 與整合使?virtiofsd,把宿主機?錄共享給微虛擬機使?。測試環境版本: Centos 8

qemu-kvm 5.1

kubernetes 1.18

containerd 1.4.4

kata container 2.0.4

使?kubernetes 新版本的RuntimeClass 對象,指定handler:kata

創建pod

1 apiVersion: v1

2 kind: Pod

3 metadata:

4 name: kata-alpine

5 spec:

6 runtimeClassName: kataclass

7 containers:

8 - name: alpine

9 image: alpine:latest

10 imagePullPolicy: IfNotPresent

11 command:

12 - /bin/sh

13 - "-c"

14 - "sleep 60m"

15 restartPolicy: Always

16 nodeSelector:

17 kubernetes.io/hostname:

k8s05 k8s05節點宿主機進程查看

1 [root@k8s05 ~]# ps aux|grep kata

2 root 500086 0.0 0.1 1412184 47796 ? Sl Jun18 14:00 /usr/bin/conta

3 root 500117 0.0 0.0 129064 4960 ? Sl Jun18 0:00 /usr/libexec/k

4 root 500155 0.2 3.2 4367516 1059672 ? Sl Jun18 41:47 /usr/bin/qemu-

5 root 500158 0.0 0.8 5667064 271696 ? Sl Jun18 0:03 /usr/libexec/k

可以看到kata container v2 啟動了新的與kubernetes對接的CRI進程containerd-shim-kata-v2, KVM虛擬機,還有2個virtiofsd進程。為什么會啟動2個virtiofs呢?為了提?安全性,virtiofsd 進程 fork??,以便進?新的 mount/pid/net 命名空間,只有?進程內存映射,CPU使???處于活躍狀 態。

可以看到qemu 虛擬化了設備vhost-user-fs-pci,有?個tag為kataShared,這個就是虛擬機要 mount的源。tag就是?個?定義?件系統需要接收的參數,定義路徑?的。

Note that Linux 4.19-based virtio-fs kernels required a different mount syntax. mount -t virtio_fs none /mnt -o tag=myfs,rootmode=040000,user_id=0,group_id=0instead. mount_tag: A tag which acts as a hint to the guest OS and is used to mount this exported path.

1 -device vhost-user-fs-pci,chardev=char-538bb1c14588b18e,tag=kataShared

進?kata容器觀察

1[root@k8s01 kata-container]# kubectl exec-it kata-alpine--sh

2/# df-h

3Filesystem Size Used Available Use%Mounted on

4kataShared74.0G49.5G24.4G67% /

5tmpfs64.0M064.0M0% /dev

6tmpfs1.4G01.4G0% /sys/fs/cgroup

7kataShared74.0G49.5G24.4G67% /etc/hosts

8kataShared74.0G49.5G24.4G67% /dev/termination-log

9kataShared74.0G49.5G24.4G67% /etc/hostname

10kataShared74.0G49.5G24.4G67% /etc/resolv.conf

11shm1.4G01.4G0% /dev/shm

12kataShared15.7G12.0K15.7G0% /run/secrets/kubernetes.i

13tmpfs64.0M064.0M0% /proc/keys

14tmpfs64.0M064.0M0% /proc/timer_list

可以看到容器已經掛載了tag定義的?件系統。tag名字可以是任意取的,只要能guest掛載時候指定相同的就可以。對于kata 來說,已經整合好了,不需要??指定

有時候如果處于調試?的或者是想看?下虛擬機的信息,可以配置kata 開啟debug 模式,qemu暴露 vsock接?,虛擬機通過agent開啟shell

1 configuration.toml

2

3 [agent.kata]

4 debug_console_enabled = true

宿主機再?動啟動kata-monitor 進程,獲取sandbox的vsock地址,??監聽localhost:8090端?,就可以通 過kata-runtime exec $sandboxId 接?虛擬機bash了

1 [root@k8s05 kata]# /usr/bin/kata-monitor

2 INFO[0010] add sandbox to cache container=7e4cef94733381a9d9c509aa2a0be87e0c0bd

3 INFO[0020] delete sandbox from cache container=5246e787b17eeab4ca83e9e73583a1b5

進?虛擬機查看

kata根據sandbox的ID,指定唯?的宿主機內存共享?錄source, 傳遞給virtiofsd. 虛擬機掛載 virtiofsd導出的共享的?錄到/run/kata-containers/shared/containers,然后再以bind mount的? 式掛載進容器。

1 [root@k8s05 ~]# kata-runtime exec 0965321e164975f01c85f997fbb0183773a9e97cb5767d9

2 bash-4.2# df -h

3 Filesystem Size Used Avail Use% Mounted on

4 rootfs 1.4G 350M 1.1G 25% /

5 dev 1.4G 0 1.4G 0% /dev

6 tmpfs 1.5G 0 1.5G 0% /dev/shm

7 tmpfs 1.5G 16K 1.5G 1% /run

8 tmpfs 1.5G 0 1.5G 0% /sys/fs/cgroup

9 kataShared 16G 1.6G 15G 11% /run/kata-containers/shared/containers

10 shm 1.5G 0 1.5G 0% /run/kata-containers/sandbox/shm

kata根據sandbox的ID,指定唯?的宿主機內存共享?錄source, 傳遞給virtiofsd. 虛擬機掛載 virtiofsd導出的共享的?錄到/run/kata-containers/shared/containers,然后再以bind mount的? 式掛載進容器。

持久卷掛載

?絡持久卷?如iscsi也是能直接掛載進kata容器的,例如創建?個pod,直接指定pvc,pv使?某?個 iscsi lun,然后在容器中創建?個?件

1 [root@k8s01 kata-container]# kubectl exec -it iscsipd -- sh

2 / # cd /mnt/iscsipd

3 /mnt/iscsipd # ls

4 lost+found

5 /mnt/iscsipd # touch aaaa.txt

在虛擬機??已經通過virtiofs掛載在了?個容器id?錄之下

1 [root@k8s05 ~]# kata-runtime exec e96d0ce2249e9027f0e1102e66a0c0013473ac48a088240

2 bash-4.2# mount

3 rootfs on / type rootfs (rw,size=1444588k,nr_inodes=361147)

4 kataShared on /run/kata-containers/shared/containers type virtiofs (rw,relatime)

5 kataShared on /run/kata-containers/e96d0ce2249e9027f0e1102e66a0c0013473ac48a08824

6 kataShared on /run/kata-containers/839162f25b7907bf91ecb027305e64dd5ccf36f55b15b6

7 bash-4.2# find / -name aaaa.txt

8 /run/kata-containers/shared/containers/839162f25b7907bf91ecb027305e64dd5ccf36f55b

在宿主機上是識別為硬盤塊設備/dev/sdd,被kubelet掛載在特定?錄下?,?個是sandbox_id,? 個是應?container_id

1 [root@k8s05 ~]# lsblk

2 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT

3 sda 8:0 0 50G 0 disk

4 ├─sda1 8:1 0 1G 0 part /boot

5 sdc 8:32 0 2G 0 disk

6 sdd 8:48 0 2G 0 disk /run/kata-containers/shared/sandboxes/e96d0ce2

就如前?說的,所有數據都要經過virtiofs,不管是鏡像數據還是?絡存儲卷。虛擬機要和宿主機數據 交互,就必須要穿過qemu,virtiofs就是穿過qemu的橋梁,提供共享?件機制。數據相關的操作最終 還是在宿主機上,?如鏡像層的合并,仍然是containerd的存儲層插件snapshotter完成,底層仍然是 調?了overlayfs?件系統

1 /etc/containerd/config.toml

2 [plugins."io.containerd.grpc.v1.cri".containerd]

3 snapshotter = "overlayfs"

4 default_runtime_name = "runc"

5 no_pivot = false

6 disable_snapshot_annotations = true

7 discard_unpacked_layers = false

8 ...

9 [plugins."io.containerd.service.v1.diff-service"] 10 default = ["walking"]

另外kata container 整合使?virtiofs的?式,與獨???操作virtiofs的?式,有些地?稍有不同,? 如按virtiofs官?說明,可以指定host?件?錄$TESTDIR作為源

1 ./virtiofsd --socket-path=/tmp/vhostqemu -o source=$TESTDIR -o cache=alwa

?在kata runtime??是不允許的,?如在configuration.toml ?配置

1 virtio_fs_extra_args = ["-o","--thread-pool-size=1","-o","/opt/kata-instance"]

kubelet 會報錯:

Warning FailedCreatePodSandBox 1s (x14 over 15s) kubelet, k8s05 Failed to create pod sandbox: rpc error: code = Unknown desc = failed to create containerd task: failed to launch qemu: exit status 1, error messages from qemu log: qemu-system- x86_64: cannot create PID fifile: Cannot open pid fifile: No such fifile or directory

kata還會打開vhost-user socket ?件描述符,傳遞給virtiofsd。可能有?會有疑問,為什么每?個 virtiofsd進程的fd參數都等于3,會不會有沖突。其實不會,因為?件描述符是進程獨?的,STDIO占 據了0,1和2,那么virtiofsd第?個可?的fd num就是3了

virtiofsd cache guest

guest ?成是會指定內存??,virtiofsd會共享使?guest的內存。默認使?memory-backend-fifile內存對象

virtiofsd共享使?VM內存,configuration.toml 配置參數default_memory

qemu 命令?接受的參數

1 -object memory-backend-file,id=dimm1,size=3072M,mem-path=/dev/shm,share=on -numa

guest和host數據傳輸都是通過virtio-fs,包括容器鏡像和容器卷,讀寫權限取決于virtiofsd進程的權限

DAX(直接訪問)

dax

DAX windows 是?塊虛擬內存區域,通過PCI Bar 把?件映射到guest??,并不真正的占?主機那么多內存,即使有100個虛擬機,設置的DAX cache是1G,也不會真的使?100G內存。只是?種page映射機制,所以也不需要任何的cache 策略。

要任何的cache 策

kata container官?下載的版本默認沒有不?持,需要編譯安裝gitlab托管的virtio-fs qemu項?qemu5.0-virtiofs-dax 分?

configuration.toml 設置virtio_fs_cache_size dax window ??,qemu初始化vhost-user-fs-pci設備

1-machine q35,accel=kvm,kernel_irqchip,nvdimm

2-device nvdimm,id=nv0,memdev=mem0 -object memory-backend-file,id=mem0,mem-path=/o

3-device vhost-user-fs-pci,chardev=char-ea09ec33d071ac42,tag=kataShared,cache-size

如果是rootfs image 可以看到模擬的nvdimm信息,??編譯鏡像的話,image_builder.sh構建腳本會在image?件頭部寫?dax metadata信息。initrd image看不到。image 相當于是直接?rootfs引導,initramfs(initrd)是把cpio+gz打包壓縮的rootfs解壓到內存?,再?內存?的initramfs來引導。前者可以利?dax,讓guest os認為這就是個dimm內存,不需要再加載到另?塊內存?,后者就是需要解壓到?塊內存。

DAX 背后的想法是避免在guest中使? _second_ 緩沖區緩存。?般對于常規?件,guest會維護???件系統緩沖區。

現在呢,對于與 virtiofs 共享的?件,由于它們駐留在主機上,您將在主機上擁有?份緩存副本,然后virtiofs 會將其發送給guest ,然后guest就也有了?份副本,成本就?較?。DAX 就是為了解決這個問題的,它所做的就是將主機buffffer map到客戶機中,guest使?與主機相同的物理內存,即使它使?不同的虛擬地址。如果沒有 DAX,內存使?量可能會?常?,因為每個guest都有??的?件緩沖區。例如,如果您啟動?個 Fedora 容器并“dnf install something”,您將看到內存使?量增加了約 300M,因為在該操作期間讀取/寫?了許多?件。如果沒有 DAX,那么guest也需要分配 350M。使? DAX,它就會直接使?宿主機中已為這些?件緩沖分配的350M內存

性能測試

測測DAX window??對性能的影響(virtio_fs_cache_size = 512)

??件測試

1fio--name=small-file-multi-read--directory=/usr/share/nginx/html \

2--rw=randread--file_service_type=sequential \

3--bs=4k--filesize=10M--nrfiles=100\

4--runtime=60--time_based--numjobs=1

5...

6small-file-multi-read: (groupid=0,jobs=1):err=0:pid=190:Mon Jul5 07:05:18

7read:IOPS=12.0k,BW=46.0MiB/s(49.2MB/s)(212MiB/4505msec)

??件測試

1fio--name=5G-bigfile-rand-read--directory=/usr/share/nginx/html--rw=ra

2...

35G-bigfile-rand-read: (groupid=0,jobs=1):err=0:pid=184:Mon Jul5 06:57:08 24read:IOPS=1255,BW=5024KiB/s(5144kB/s)(294MiB/60002msec)

從壓測觀察到當讀寫的?件超過dax window后,性能下降很多,原因和dax映射機制有關,dax窗?的回收是?較慢的,當活躍數據超過dax window ,產?很多的回收?作會導致性能很差。另外daxwindow的映射單元是按每2MB內存??映射的,具體來說就是由512個 struct page (one structpage for each 4K range) 和?個 struct fuse_dax_mapping 。每個單元映射范圍?約需要消耗32K額外內存。?如1GB of dax window: 512 * 32K = 16MB of memory usage.

同時還觀察到virtiofsd占?內存很?,?如本實例qemu-system-x86_64 rss 內存3.1G,virtiofsd rss1.6G,?產中對資源的控制需要細節控制。

總結

kata container 還是?項?較復雜的技術組合,實踐?檔較少,有問題要不就是求教于社區,要不就得翻源碼,源碼牽涉到linux kernel,qemu/kvm,fifilesystem,內存映射,容器等多種技術,?且還是?較新的技術。但云原?安全?是未來越來越受到重視的領域,極?影響業務容器化的決策。希望?業能更多的參與到安全容器上來,增加實踐場景,暢快投?云原?的懷抱。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數字化
    +關注

    關注

    8

    文章

    9364

    瀏覽量

    63173
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    合成與技術簽署戰略合作協議

    近日,蘇州技術有限公司(以下簡稱“技術”)與合成(北京)智能科技有限公司(以下簡稱“
    的頭像 發表于 06-10 13:54 ?242次閱讀

    技術蒞臨電物資交流訪問

    技術能源重工業總裁郭立鵬拜訪華電物資(招標、碳資產)黨委書記、董事長邵志剛。近日,蘇州技術有限公司(以下簡稱“
    的頭像 發表于 05-20 14:19 ?314次閱讀

    洲明科技與富士康科技深化合作

    近日,洲明集團國內技術營銷總經理夏志凱一行赴富士康大學,展開戰略推廣與深度交流。這是繼今年2月洲明與富士康科技戰略合作簽署后,雙方在智慧光顯領域的再一次協同升級。
    的頭像 發表于 04-29 15:45 ?267次閱讀

    技術亮相西班牙先進工廠技術

    近日,西班牙先進工廠技術展(Advanced Factory Expo)在西班牙巴塞羅那盛大開幕。此次展會匯聚了全球頂尖的制造企業,技術展出了多款創新產品,吸引了眾多行業專家及合作伙伴的關注,向全球觀眾展現了
    的頭像 發表于 04-25 18:07 ?558次閱讀

    技術年產40萬臺機器人生產基地投產

    近日,技術南京基地投產暨研發測試中心簽約儀式在南京成功舉行。據了解,該生產基地于2022年6月開始動工,總投資不超過16.5億元。(注:投資金額來自2022年
    的頭像 發表于 04-16 10:51 ?668次閱讀

    技術南京基地正式投產

    近日,技術南京基地投產暨研發測試中心簽約儀式成功舉行。南京市人民政府市長陳之常,南京市委常委、江寧區委書記林濤,南京市政府秘書長洪禮來;技術
    的頭像 發表于 04-14 14:58 ?504次閱讀

    京東方工廠喬遷儀式成功舉辦

    近日,京東方工廠在珠海市金灣區成功舉辦主題為“芯啟航,共譜新華章”的喬遷儀式。
    的頭像 發表于 03-10 17:26 ?629次閱讀

    技術與蒂森克虜伯共探新能源汽車測試領域合作

    近日,技術迎來了德國工業巨頭——蒂森克虜伯汽車事業部德國銷售總監Andeas Prelle, 測試臺產品經理Thomas Kruse, 電氣專家 Ulrich Siekmann 以及蒂森中國采購總監王總等一行14人的到訪。
    的頭像 發表于 03-10 11:02 ?672次閱讀

    iMachine設備智聯系統在煤礦行業的應用案例

    創力技術研究院與研合作,依托研iMachine設備智聯系統共創了采煤機械智能綜采平臺,驅動煤礦智能運維,開啟智能化管控新模式。
    的頭像 發表于 02-13 09:10 ?630次閱讀

    欣宏泰與技術達成戰略合作

    近日,江蘇欣宏泰機電有限公司(以下簡稱“欣宏泰”)與蘇州技術有限公司(以下簡稱“技術”)戰略合作簽約儀式在
    的頭像 發表于 01-08 09:24 ?590次閱讀

    華為 X 實例 CPU 性能測試詳解與優化策略

    ? 3.2 CPU性能瓶頸分析 ? 4. CPU性能優化策略 ? 4.1 優化CPU性能的常用方法 ? 4.2 操作系統內核調優 ? 4.3 使用性能監控工具 ? 5. 總結與建議 ? 引言 隨著計算技術的發
    的頭像 發表于 12-30 14:52 ?602次閱讀
    華為<b class='flag-5'>云</b> X 實例 CPU 性能<b class='flag-5'>測試</b>詳解與優化策略

    技術與華工科技達成戰略合作

    近日,華工科技與技術在蘇州舉行戰略合作簽約儀式。華工科技黨委書記、董事長馬新強,技術董事長朱興明出席并見證簽約。華工激光副總經理王建剛、
    的頭像 發表于 11-22 10:05 ?784次閱讀

    服務器怎么樣靠譜嗎?

    ? 億計算領域有著良好的口碑和廣泛的用戶基礎,以下是關于億
    的頭像 發表于 11-20 09:44 ?537次閱讀

    -互聯網基礎應用服務提供商

    互聯網基礎應用、計算服務提供商,高品質服務專家,計算領先平臺 億官網:www.i658.com 億
    的頭像 發表于 11-15 17:43 ?1168次閱讀
    億<b class='flag-5'>華</b><b class='flag-5'>云</b>-互聯網基礎應用<b class='flag-5'>云</b>服務提供商

    技術2024歐洲汽車測試展精彩回顧

    技術攜前沿汽車測試技術和綜合解決方案,亮相德國斯圖加特2024歐洲汽車測試展,向全球觀眾展示了新能源汽車
    的頭像 發表于 09-13 16:19 ?986次閱讀
    主站蜘蛛池模板: 2019天天射干| 欧美性极品hd高清视频 | 久久久蜜桃 | 天天操中文字幕 | 天天在线天天看成人免费视频 | 天天舔 | youjizz国产 | 国产天天在线 | 国产精品国产午夜免费福利看 | 国产小视频在线观看 | 四虎在线最新永久免费播放 | 黄色大片日本 | 日韩三级毛片 | 特色一级黄色片 | 孩交精品xxxx视频视频 | 人人揉揉香蕉大免费不卡 | 四虎国产一区二区三区 | 五月天伦理 | 国产精品毛片天天看片 | xxx日本69hd| 免费视频爰爱太爽了 | 美女国产在线观看免费观看 | 一本到卡二卡三卡视频 | 天天摸天天操天天射 | 国模大尺度在线 | 国产成人亚洲日本精品 | 免费啪视频在线观看免费的 | 国产一级特黄aa大片在线 | 国产一区二卡三区四区 | 一级毛毛片毛片毛片毛片在线看 | 免费番茄社区性色大片 | 国产精品久久久福利 | 最近免费hd| 男人j进女人j免费视频视频 | 在线看黄的网站 | 午夜噜噜噜 | 夜夜操操 | 好大好猛好爽好深视频免费 | 日日噜噜爽爽狠狠视频 | 久久成人免费网站 | 成 人 免 费 黄 色 |