国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Containerd 的前世今生和保姆級(jí)入門教程

共 25107字,需瀏覽 51分鐘

 ·

2020-12-18 09:53


該文章隨時(shí)會(huì)有校正更新,公眾號(hào)無(wú)法更新,歡迎訂閱博客查看最新內(nèi)容:https://fuckcloudnative.io

1. Containerd 的前世今生

很久以前,Docker 強(qiáng)勢(shì)崛起,以“鏡像”這個(gè)大招席卷全球,對(duì)其他容器技術(shù)進(jìn)行致命的降維打擊,使其毫無(wú)招架之力,就連 Google 也不例外。Google 為了不被拍死在沙灘上,被迫拉下臉面(當(dāng)然,跪舔是不可能的),希望 Docker 公司和自己聯(lián)合推進(jìn)一個(gè)開源的容器運(yùn)行時(shí)作為 Docker 的核心依賴,不然就走著瞧。Docker 公司覺得自己的智商被侮辱了,走著瞧就走著瞧,誰(shuí)怕誰(shuí)??!

很明顯,Docker 公司的這個(gè)決策斷送了自己的大好前程,造成了今天的悲劇。

緊接著,Google 聯(lián)合 Red Hat、IBM 等幾位巨佬連哄帶騙忽悠 Docker 公司將 libcontainer 捐給中立的社區(qū)(OCI,Open Container Intiative),并改名為 runc,不留一點(diǎn) Docker 公司的痕跡~~

這還不夠,為了徹底扭轉(zhuǎn) Docker 一家獨(dú)大的局面,幾位大佬又合伙成立了一個(gè)基金會(huì)叫 CNCF(Cloud Native Computing Fundation),這個(gè)名字想必大家都很熟了,我就不詳細(xì)介紹了。CNCF 的目標(biāo)很明確,既然在當(dāng)前的維度上干不過 Docker,干脆往上爬,升級(jí)到大規(guī)模容器編排的維度,以此來(lái)?yè)魯?Docker。

Docker 公司當(dāng)然不甘示弱,搬出了 Swarm 和 Kubernetes 進(jìn)行 PK,最后的結(jié)局大家都知道了,Swarm 戰(zhàn)敗。然后 Docker 公司耍了個(gè)小聰明,將自己的核心依賴 Containerd 捐給了 CNCF,以此來(lái)標(biāo)榜 Docker 是一個(gè) PaaS 平臺(tái)。

很明顯,這個(gè)小聰明又大大加速了自己的滅亡。

巨佬們心想,想當(dāng)初想和你合作搞個(gè)中立的核心運(yùn)行時(shí),你死要面子活受罪,就是不同意,好家伙,現(xiàn)在自己搞了一個(gè),還捐出來(lái)了,馬老師,發(fā)生甚莫事了?

這好嗎?

這不好

也罷,這倒省事了,我就直接拿 Containerd 來(lái)做文章吧。

首先呢,為了表示 Kubernetes 的中立性,當(dāng)然要搞個(gè)標(biāo)準(zhǔn)化的容器運(yùn)行時(shí)接口,只要適配了這個(gè)接口的容器運(yùn)行時(shí),都可以和我一起玩耍哦,第一個(gè)支持這個(gè)接口的當(dāng)然就是 Containerd 啦。至于這個(gè)接口的名字,大家應(yīng)該都知道了,它叫 CRI(Container Runntime Interface)。

這樣還不行,為了蠱惑 Docker 公司,Kubernetes 暫時(shí)先委屈自己,專門在自己的組件中集成了一個(gè) shim(你可以理解為墊片),用來(lái)將 CRI 的調(diào)用翻譯成 Docker 的 API,讓 Docker 也能和自己愉快地玩耍,溫水煮青蛙,養(yǎng)肥了再殺。。。

就這樣,Kubernetes 一邊假裝和 Docker 愉快玩耍,一邊背地里不斷優(yōu)化 Containerd 的健壯性以及和 CRI 對(duì)接的絲滑性?,F(xiàn)在 Containerd 的翅膀已經(jīng)完全硬了,是時(shí)候卸下我的偽裝,和 Docker say bye bye 了。后面的事情大家也都知道了~~

Docker 這門技術(shù)成功了,Docker 這個(gè)公司卻失敗了。

2. Containerd 架構(gòu)

時(shí)至今日,Containerd 已經(jīng)變成一個(gè)工業(yè)級(jí)的容器運(yùn)行時(shí)了,連口號(hào)都有了:超簡(jiǎn)單!超健壯!可移植性超強(qiáng)!

當(dāng)然,為了讓 Docker 以為自己不會(huì)搶飯碗,Containerd 聲稱自己的設(shè)計(jì)目的主要是為了嵌入到一個(gè)更大的系統(tǒng)中(暗指 Kubernetes),而不是直接由開發(fā)人員或終端用戶使用。

事實(shí)上呢,Containerd 現(xiàn)在基本上啥都能干了,開發(fā)人員或者終端用戶可以在宿主機(jī)中管理完整的容器生命周期,包括容器鏡像的傳輸和存儲(chǔ)、容器的執(zhí)行和管理、存儲(chǔ)和網(wǎng)絡(luò)等。大家可以考慮學(xué)起來(lái)了。

學(xué)習(xí) Containerd 最好的時(shí)機(jī)是關(guān)注公眾號(hào) 云原生實(shí)驗(yàn)室 后,其次是現(xiàn)在,看完了再關(guān)注公眾號(hào)也不遲?。

先來(lái)看看 Containerd 的架構(gòu):

可以看到 Containerd 仍然采用標(biāo)準(zhǔn)的 C/S 架構(gòu),服務(wù)端通過 GRPC 協(xié)議提供穩(wěn)定的 API,客戶端通過調(diào)用服務(wù)端的 API 進(jìn)行高級(jí)的操作。

為了解耦,Containerd 將不同的職責(zé)劃分給不同的組件,每個(gè)組件就相當(dāng)于一個(gè)子系統(tǒng)(subsystem)。連接不同子系統(tǒng)的組件被稱為模塊。

總體上 Containerd 被劃分為兩個(gè)子系統(tǒng):

  • Bundle : 在 Containerd 中,Bundle 包含了配置、元數(shù)據(jù)和根文件系統(tǒng)數(shù)據(jù),你可以理解為容器的文件系統(tǒng)。而 Bundle 子系統(tǒng)允許用戶從鏡像中提取和打包 Bundles。
  • Runtime : Runtime 子系統(tǒng)用來(lái)執(zhí)行 Bundles,比如創(chuàng)建容器。

其中,每一個(gè)子系統(tǒng)的行為都由一個(gè)或多個(gè)模塊協(xié)作完成(架構(gòu)圖中的 Core 部分)。每一種類型的模塊都以插件的形式集成到 Containerd 中,而且插件之間是相互依賴的。例如,上圖中的每一個(gè)長(zhǎng)虛線的方框都表示一種類型的插件,包括 Service Plugin、Metadata PluginGC Plugin、Runtime Plugin 等,其中 Service Plugin 又會(huì)依賴 Metadata Plugin、GC Plugin 和 Runtime Plugin。每一個(gè)小方框都表示一個(gè)細(xì)分的插件,例如 Metadata Plugin 依賴 Containers Plugin、Content Plugin 等。總之,萬(wàn)物皆插件,插件就是模塊,模塊就是插件。

這里介紹幾個(gè)常用的插件:

  • Content Plugin : 提供對(duì)鏡像中可尋址內(nèi)容的訪問,所有不可變的內(nèi)容都被存儲(chǔ)在這里。
  • Snapshot Plugin : 用來(lái)管理容器鏡像的文件系統(tǒng)快照。鏡像中的每一個(gè) layer 都會(huì)被解壓成文件系統(tǒng)快照,類似于 Docker 中的 graphdriver。
  • Metrics : 暴露各個(gè)組件的監(jiān)控指標(biāo)。

從總體來(lái)看,Containerd 被分為三個(gè)大塊:Storage、MetadataRuntime,可以將上面的架構(gòu)圖提煉一下:

這是使用 bucketbench[1] 對(duì) Docker、crioContainerd 的性能測(cè)試結(jié)果,包括啟動(dòng)、停止和刪除容器,以比較它們所耗的時(shí)間:

可以看到 Containerd 在各個(gè)方面都表現(xiàn)良好,總體性能還是優(yōu)越于 Dockercrio 的。

3. Containerd 安裝

了解了 Containerd 的概念后,就可以動(dòng)手安裝體驗(yàn)一把了。本文的演示環(huán)境為 Ubuntu 18.04

安裝依賴

為 seccomp 安裝依賴:

???→?sudo?apt-get?update
???→?sudo?apt-get?install?libseccomp2

下載并解壓 Containerd 程序

Containerd 提供了兩個(gè)壓縮包,一個(gè)叫 containerd-${VERSION}.${OS}-${ARCH}.tar.gz,另一個(gè)叫 cri-containerd-${VERSION}.${OS}-${ARCH}.tar.gz。其中 ?cri-containerd-${VERSION}.${OS}-${ARCH}.tar.gz 包含了所有 Kubernetes 需要的二進(jìn)制文件。如果你只是本地測(cè)試,可以選擇前一個(gè)壓縮包;如果是作為 Kubernetes 的容器運(yùn)行時(shí),需要選擇后一個(gè)壓縮包。

Containerd 是需要調(diào)用 runc 的,而第一個(gè)壓縮包是不包含 runc 二進(jìn)制文件的,如果你選擇第一個(gè)壓縮包,還需要提前安裝 runc。所以我建議直接使用 cri-containerd 壓縮包。

首先從 release 頁(yè)面[2]下載最新版本的壓縮包,當(dāng)前最新版本為 1.4.3:

???→?wget?https://github.com/containerd/containerd/releases/download/v1.4.3/cri-containerd-cni-1.4.3-linux-amd64.tar.gz

#?也可以替換成下面的?URL?加速下載
???→?wget?https://download.fastgit.org/containerd/containerd/releases/download/v1.4.3/cri-containerd-cni-1.4.3-linux-amd64.tar.gz

可以通過 tar 的 -t 選項(xiàng)直接看到壓縮包中包含哪些文件:

???→?tar?-tf?cri-containerd-cni-1.4.3-linux-amd64.tar.gz
etc/
etc/cni/
etc/cni/net.d/
etc/cni/net.d/10-containerd-net.conflist
etc/crictl.yaml
etc/systemd/
etc/systemd/system/
etc/systemd/system/containerd.service
usr/
usr/local/
usr/local/bin/
usr/local/bin/containerd-shim-runc-v2
usr/local/bin/ctr
usr/local/bin/containerd-shim
usr/local/bin/containerd-shim-runc-v1
usr/local/bin/crictl
usr/local/bin/critest
usr/local/bin/containerd
usr/local/sbin/
usr/local/sbin/runc
opt/
opt/cni/
opt/cni/bin/
opt/cni/bin/vlan
opt/cni/bin/host-local
opt/cni/bin/flannel
opt/cni/bin/bridge
opt/cni/bin/host-device
opt/cni/bin/tuning
opt/cni/bin/firewall
opt/cni/bin/bandwidth
opt/cni/bin/ipvlan
opt/cni/bin/sbr
opt/cni/bin/dhcp
opt/cni/bin/portmap
opt/cni/bin/ptp
opt/cni/bin/static
opt/cni/bin/macvlan
opt/cni/bin/loopback
opt/containerd/
opt/containerd/cluster/
opt/containerd/cluster/version
opt/containerd/cluster/gce/
opt/containerd/cluster/gce/cni.template
opt/containerd/cluster/gce/configure.sh
opt/containerd/cluster/gce/cloud-init/
opt/containerd/cluster/gce/cloud-init/master.yaml
opt/containerd/cluster/gce/cloud-init/node.yaml
opt/containerd/cluster/gce/env

直接將壓縮包解壓到系統(tǒng)的各個(gè)目錄中:

???→?sudo?tar?-C?/?-xzf?cri-containerd-cni-1.4.3-linux-amd64.tar.gz

/usr/local/bin/usr/local/sbin 追加到 ~/.bashrc 文件的 $PATH 環(huán)境變量中:

export?PATH=$PATH:/usr/local/bin:/usr/local/sbin

立即生效:

???→?source?~/.bashrc

查看版本:

???→?ctr?version
Client:
??Version:??v1.4.3
??Revision:?269548fa27e0089a8b8278fc4fc781d7f65a939b
??Go?version:?go1.15.5

Server:
??Version:??v1.4.3
??Revision:?269548fa27e0089a8b8278fc4fc781d7f65a939b
??UUID:?d1724999-91b3-4338-9288-9a54c9d52f70

生成配置文件

Containerd 的默認(rèn)配置文件為 ?/etc/containerd/config.toml,我們可以通過命令來(lái)生成一個(gè)默認(rèn)的配置:

???→?mkdir?/etc/containerd
???→?containerd?config?default?>?/etc/containerd/config.toml

鏡像加速

由于某些不可描述的因素,在國(guó)內(nèi)拉取公共鏡像倉(cāng)庫(kù)的速度是極慢的,為了節(jié)約拉取時(shí)間,需要為 Containerd 配置鏡像倉(cāng)庫(kù)的 mirror。Containerd 的鏡像倉(cāng)庫(kù) mirror 與 Docker 相比有兩個(gè)區(qū)別:

  • Containerd 只支持通過 CRI 拉取鏡像的 mirror,也就是說,只有通過 crictl 或者 Kubernetes 調(diào)用時(shí) mirror 才會(huì)生效,通過 ctr 拉取是不會(huì)生效的。
  • Docker 只支持為 Docker Hub 配置 mirror,而 Containerd 支持為任意鏡像倉(cāng)庫(kù)配置 mirror。

配置鏡像加速之前,先來(lái)看下 Containerd 的配置結(jié)構(gòu),乍一看可能會(huì)覺得很復(fù)雜,復(fù)雜就復(fù)雜在 plugin 的配置部分:

[plugins]
[plugins."io.containerd.gc.v1.scheduler"]
pause_threshold = 0.02
deletion_threshold = 0
mutation_threshold = 100
schedule_delay = "0s"
startup_delay = "100ms"
[plugins."io.containerd.grpc.v1.cri"]
disable_tcp_service = true
stream_server_address = "127.0.0.1"
stream_server_port = "0"
stream_idle_timeout = "4h0m0s"
enable_selinux = false
sandbox_image = "k8s.gcr.io/pause:3.1"
stats_collect_period = 10
systemd_cgroup = false
enable_tls_streaming = false
max_container_log_line_size = 16384
disable_cgroup = false
disable_apparmor = false
restrict_oom_score_adj = false
max_concurrent_downloads = 3
disable_proc_mount = false
[plugins."io.containerd.grpc.v1.cri".containerd]
snapshotter = "overlayfs"
default_runtime_name = "runc"
no_pivot = false
[plugins."io.containerd.grpc.v1.cri".containerd.default_runtime]
runtime_type = ""
runtime_engine = ""
runtime_root = ""
privileged_without_host_devices = false
[plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime]
runtime_type = ""
runtime_engine = ""
runtime_root = ""
privileged_without_host_devices = false
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v1"
runtime_engine = ""
runtime_root = ""
privileged_without_host_devices = false
[plugins."io.containerd.grpc.v1.cri".cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"
max_conf_num = 1
conf_template = ""
[plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://registry-1.docker.io"]
[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]
tls_cert_file = ""
tls_key_file = ""
[plugins."io.containerd.internal.v1.opt"]
path = "/opt/containerd"
[plugins."io.containerd.internal.v1.restart"]
interval = "10s"
[plugins."io.containerd.metadata.v1.bolt"]
content_sharing_policy = "shared"
[plugins."io.containerd.monitor.v1.cgroups"]
no_prometheus = false
[plugins."io.containerd.runtime.v1.linux"]
shim = "containerd-shim"
runtime = "runc"
runtime_root = ""
no_shim = false
shim_debug = false
[plugins."io.containerd.runtime.v2.task"]
platforms = ["linux/amd64"]
[plugins."io.containerd.service.v1.diff-service"]
default = ["walking"]
[plugins."io.containerd.snapshotter.v1.devmapper"]
root_path = ""
pool_name = ""
base_image_size = ""

每一個(gè)頂級(jí)配置塊的命名都是 plugins."io.containerd.xxx.vx.xxx" 這種形式,其實(shí)每一個(gè)頂級(jí)配置塊都代表一個(gè)插件,其中 io.containerd.xxx.vx 表示插件的類型,vx 后面的 xxx 表示插件的 ID??梢酝ㄟ^ ctr 一覽無(wú)余:

???→?ctr?plugin?ls
TYPE????????????????????????????ID????????????????????PLATFORMS??????STATUS
io.containerd.content.v1????????content???????????????-??????????????ok
io.containerd.snapshotter.v1????btrfs?????????????????linux/amd64????error
io.containerd.snapshotter.v1????devmapper?????????????linux/amd64????error
io.containerd.snapshotter.v1????aufs??????????????????linux/amd64????ok
io.containerd.snapshotter.v1????native????????????????linux/amd64????ok
io.containerd.snapshotter.v1????overlayfs?????????????linux/amd64????ok
io.containerd.snapshotter.v1????zfs???????????????????linux/amd64????error
io.containerd.metadata.v1???????bolt??????????????????-??????????????ok
io.containerd.differ.v1?????????walking???????????????linux/amd64????ok
io.containerd.gc.v1?????????????scheduler?????????????-??????????????ok
io.containerd.service.v1????????containers-service????-??????????????ok
io.containerd.service.v1????????content-service???????-??????????????ok
io.containerd.service.v1????????diff-service??????????-??????????????ok
io.containerd.service.v1????????images-service????????-??????????????ok
io.containerd.service.v1????????leases-service????????-??????????????ok
io.containerd.service.v1????????namespaces-service????-??????????????ok
io.containerd.service.v1????????snapshots-service?????-??????????????ok
io.containerd.runtime.v1????????linux?????????????????linux/amd64????ok
io.containerd.runtime.v2????????task??????????????????linux/amd64????ok
io.containerd.monitor.v1????????cgroups???????????????linux/amd64????ok
io.containerd.service.v1????????tasks-service?????????-??????????????ok
io.containerd.internal.v1???????restart???????????????-??????????????ok
io.containerd.grpc.v1???????????containers????????????-??????????????ok
io.containerd.grpc.v1???????????content???????????????-??????????????ok
io.containerd.grpc.v1???????????diff??????????????????-??????????????ok
io.containerd.grpc.v1???????????events????????????????-??????????????ok
io.containerd.grpc.v1???????????healthcheck???????????-??????????????ok
io.containerd.grpc.v1???????????images????????????????-??????????????ok
io.containerd.grpc.v1???????????leases????????????????-??????????????ok
io.containerd.grpc.v1???????????namespaces????????????-??????????????ok
io.containerd.internal.v1???????opt???????????????????-??????????????ok
io.containerd.grpc.v1???????????snapshots?????????????-??????????????ok
io.containerd.grpc.v1???????????tasks?????????????????-??????????????ok
io.containerd.grpc.v1???????????version???????????????-??????????????ok
io.containerd.grpc.v1???????????cri???????????????????linux/amd64????ok

頂級(jí)配置塊下面的子配置塊表示該插件的各種配置,比如 cri 插件下面就分為 containerd、cniregistry 的配置,而 containerd 下面又可以配置各種 runtime,還可以配置默認(rèn)的 runtime。

鏡像加速的配置就在 cri 插件配置塊下面的 registry 配置塊,所以需要修改的部分如下:

    [plugins."io.containerd.grpc.v1.cri".registry]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
endpoint = ["https://dockerhub.mirrors.nwafu.edu.cn"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
endpoint = ["https://registry.aliyuncs.com/k8sxio"]
[plugins."io.containerd.grpc.v1.cri".registry.mirrors."gcr.io"]
endpoint = ["xxx"]
  • registry.mirrors."xxx" : 表示需要配置 mirror 的鏡像倉(cāng)庫(kù)。例如,registry.mirrors."docker.io" 表示配置 docker.io 的 mirror。
  • endpoint : 表示提供 mirror 的鏡像加速服務(wù)。例如,這里推薦使用西北農(nóng)林科技大學(xué)提供的鏡像加速服務(wù)作為 docker.io 的 mirror。

至于 gcr.io,目前還沒有公共的加速服務(wù)。我自己掏錢搭了個(gè)加速服務(wù),拉取速度大概是 3M/s 左右,有加速需求的同學(xué)可以通過微信號(hào):cloud-native-yang 加我為好友再詳細(xì)咨詢。

存儲(chǔ)配置

Containerd 有兩個(gè)不同的存儲(chǔ)路徑,一個(gè)用來(lái)保存持久化數(shù)據(jù),一個(gè)用來(lái)保存運(yùn)行時(shí)狀態(tài)。

root = "/var/lib/containerd"
state = "/run/containerd"

root用來(lái)保存持久化數(shù)據(jù),包括 Snapshots, Content, Metadata 以及各種插件的數(shù)據(jù)。每一個(gè)插件都有自己?jiǎn)为?dú)的目錄,Containerd 本身不存儲(chǔ)任何數(shù)據(jù),它的所有功能都來(lái)自于已加載的插件,真是太機(jī)智了。

???→?tree?-L?2?/var/lib/containerd/
/var/lib/containerd/
├──?io.containerd.content.v1.content
│???├──?blobs
│???└──?ingest
├──?io.containerd.grpc.v1.cri
│???├──?containers
│???└──?sandboxes
├──?io.containerd.metadata.v1.bolt
│???└──?meta.db
├──?io.containerd.runtime.v1.linux
│???└──?k8s.io
├──?io.containerd.runtime.v2.task
├──?io.containerd.snapshotter.v1.aufs
│???└──?snapshots
├──?io.containerd.snapshotter.v1.btrfs
├──?io.containerd.snapshotter.v1.native
│???└──?snapshots
├──?io.containerd.snapshotter.v1.overlayfs
│???├──?metadata.db
│???└──?snapshots
└──?tmpmounts

18?directories,?2?files

state 用來(lái)保存臨時(shí)數(shù)據(jù),包括 sockets、pid、掛載點(diǎn)、運(yùn)行時(shí)狀態(tài)以及不需要持久化保存的插件數(shù)據(jù)。

???→?tree?-L?2?/run/containerd/
/run/containerd/
├──?containerd.sock
├──?containerd.sock.ttrpc
├──?io.containerd.grpc.v1.cri
│???├──?containers
│???└──?sandboxes
├──?io.containerd.runtime.v1.linux
│???└──?k8s.io
├──?io.containerd.runtime.v2.task
└──?runc
????└──?k8s.io

8?directories,?2?files

OOM

還有一項(xiàng)配置需要留意:

oom_score = 0

Containerd 是容器的守護(hù)者,一旦發(fā)生內(nèi)存不足的情況,理想的情況應(yīng)該是先殺死容器,而不是殺死 Containerd。所以需要調(diào)整 Containerd 的 OOM 權(quán)重,減少其被 OOM Kill 的幾率。最好是將 oom_score 的值調(diào)整為比其他守護(hù)進(jìn)程略低的值。這里的 oom_socre 其實(shí)對(duì)應(yīng)的是 /proc//oom_socre_adj,在早期的 Linux 內(nèi)核版本里使用 oom_adj 來(lái)調(diào)整權(quán)重, 后來(lái)改用 oom_socre_adj 了。該文件描述如下:

The value of /proc//oom_score_adj is added to the badness score before it is used to determine which task to kill. ?Acceptable values range from -1000 (OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). ?This allows userspace to polarize the preference for oom killing either by always preferring a certain task or completely disabling it. ?The lowest possible value, -1000, is equivalent to disabling oom killing entirely for that task since it will always report a badness score of 0.

在計(jì)算最終的 badness score 時(shí),會(huì)在計(jì)算結(jié)果是中加上 oom_score_adj ,這樣用戶就可以通過該在值來(lái)保護(hù)某個(gè)進(jìn)程不被殺死或者每次都?xì)⒛硞€(gè)進(jìn)程。其取值范圍為 -10001000

如果將該值設(shè)置為 -1000,則進(jìn)程永遠(yuǎn)不會(huì)被殺死,因?yàn)榇藭r(shí) badness score 永遠(yuǎn)返回0。

建議 Containerd 將該值設(shè)置為 -9990 之間。如果作為 Kubernetes 的 Worker 節(jié)點(diǎn),可以考慮設(shè)置為 -999。

Systemd 配置

建議通過 systemd 配置 Containerd 作為守護(hù)進(jìn)程運(yùn)行,配置文件在上文已經(jīng)被解壓出來(lái)了:

???→?cat?/etc/systemd/system/containerd.service
#?Copyright?The?containerd?Authors.
#
#?Licensed?under?the?Apache?License,?Version?2.0?(the?"License");
#?you?may?not?use?this?file?except?in?compliance?with?the?License.
#?You?may?obtain?a?copy?of?the?License?at
#
#?????http://www.apache.org/licenses/LICENSE-2.0
#
#?Unless?required?by?applicable?law?or?agreed?to?in?writing,?software
#?distributed?under?the?License?is?distributed?on?an?"AS?IS"?BASIS,
#?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND,?either?express?or?implied.
#?See?the?License?for?the?specific?language?governing?permissions?and
#?limitations?under?the?License.

[Unit]
Description=containerd?container?runtime
Documentation=https://containerd.io
After=network.target?local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe?overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
#?Having?non-zero?Limit*s?causes?performance?problems?due?to?accounting?overhead
#?in?the?kernel.?We?recommend?using?cgroups?to?do?container-local?accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
#?Comment?TasksMax?if?your?systemd?version?does?not?supports?it.
#?Only?systemd?226?and?above?support?this?version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

這里有兩個(gè)重要的參數(shù):

  • Delegate : 這個(gè)選項(xiàng)允許 Containerd 以及運(yùn)行時(shí)自己管理自己創(chuàng)建的容器的 cgroups。如果不設(shè)置這個(gè)選項(xiàng),systemd 就會(huì)將進(jìn)程移到自己的 cgroups 中,從而導(dǎo)致 Containerd 無(wú)法正確獲取容器的資源使用情況。

  • KillMode : 這個(gè)選項(xiàng)用來(lái)處理 Containerd 進(jìn)程被殺死的方式。默認(rèn)情況下,systemd 會(huì)在進(jìn)程的 cgroup 中查找并殺死 Containerd 的所有子進(jìn)程,這肯定不是我們想要的。KillMode字段可以設(shè)置的值如下。

    我們需要將 KillMode 的值設(shè)置為 process,這樣可以確保升級(jí)或重啟 Containerd 時(shí)不殺死現(xiàn)有的容器。

    • control-group(默認(rèn)值):當(dāng)前控制組里面的所有子進(jìn)程,都會(huì)被殺掉
    • process:只殺主進(jìn)程
    • mixed:主進(jìn)程將收到 SIGTERM 信號(hào),子進(jìn)程收到 SIGKILL 信號(hào)
    • none:沒有進(jìn)程會(huì)被殺掉,只是執(zhí)行服務(wù)的 stop 命令。

現(xiàn)在到了最關(guān)鍵的一步:?jiǎn)?dòng) Containerd。執(zhí)行一條命令就完事:

???→?systemctl?enable?containerd?--now

接下來(lái)進(jìn)入本文最后一部分:Containerd 的基本使用方式。本文只會(huì)介紹 Containerd 的本地使用方法,即本地客戶端 ctr 的使用方法,不會(huì)涉及到 crictl,后面有機(jī)會(huì)再介紹 crictl。

4. Containerd 快速安裝

如果你想在一分鐘內(nèi)快速裝好 Kubernetes 和 Containerd,可以使用 Sealos[3] 來(lái)部署。該項(xiàng)目旨在做一個(gè)簡(jiǎn)單干凈輕量級(jí)穩(wěn)定的 kubernetes 安裝工具,一條命令,離線安裝,包含所有依賴,內(nèi)核負(fù)載不依賴 haproxy keepalived,純 golang 開發(fā),99 年證書。1.20.0 版本的離線包搭載了最新版本的 Containerd,還支持 arm64 架構(gòu),簡(jiǎn)直就是簡(jiǎn)直了。

部署方法特別簡(jiǎn)單,首先下載并安裝 sealos, sealos 是個(gè) golang 的二進(jìn)制工具,直接下載拷貝到 bin 目錄即可, release 頁(yè)面也可下載:

???→?wget?-c?https://sealyun.oss-cn-beijing.aliyuncs.com/latest/sealos
???→?chmod?+x?sealos?&&?mv?sealos?/usr/bin

下載離線資源包:

???→?wget?-c?https://sealyun.oss-cn-beijing.aliyuncs.com/7b6af025d4884fdd5cd51a674994359c-1.18.0/kube1.18.0.tar.gz

安裝一個(gè)三 master 的高可用 Kubernetes 集群:

???→?sealos?init?--passwd?123456?
--master?192.168.0.2??--master?192.168.0.3??--master?192.168.0.4??
--node?192.168.0.5?
--pkg-url?/root/kube1.18.0.tar.gz?
--version?v1.18.0

然后就完事了。。。

詳細(xì)使用方式請(qǐng)?jiān)L問 https://sealyun.com

5. ctr 使用

ctr 目前很多功能做的還沒有 docker 那么完善,但基本功能已經(jīng)具備了。下面將圍繞鏡像容器這兩個(gè)方面來(lái)介紹其使用方法。

鏡像

鏡像下載:

???→?ctr?i?pull?docker.io/library/nginx:alpine
docker.io/library/nginx:alpine:???????????????????????????????????????????????????resolved???????|++++++++++++++++++++++++++++++++++++++|
index-sha256:efc93af57bd255ffbfb12c89ec0714dd1a55f16290eb26080e3d1e7e82b3ea66:????done???????????|++++++++++++++++++++++++++++++++++++++|
manifest-sha256:6ceeeab513f7d15cea38c1f8dfe5455323b5a1bfd568516b3b0ee70406f75247:?done???????????|++++++++++++++++++++++++++++++++++++++|
config-sha256:0fde4fb87e476fd1655b3f04f55aa5b4b3ef7de7c701eb46573bb5a5dcf66fd2:???done???????????|++++++++++++++++++++++++++++++++++++++|
layer-sha256:abaddf4965e5e9ce9953f2e136b3bf9cc15365adbcf0c68b108b1cc26c12b1be:????done???????????|++++++++++++++++++++++++++++++++++++++|
layer-sha256:05e7bc50f07f000e9993ec0d264b9ffcbb9a01a4d69c68f556d25e9811a8f7f4:????done???????????|++++++++++++++++++++++++++++++++++++++|
layer-sha256:c78f7f670e47cf98494e7dbe08e463d34c160bf6a5939a2155ff4438cb8b0e80:????done???????????|++++++++++++++++++++++++++++++++++++++|
layer-sha256:ce77cf6a2ede66c463dcdd39f1a43cfbac3723a99e94f697bc20faee0f7cce1b:????done???????????|++++++++++++++++++++++++++++++++++++++|
layer-sha256:3080fd9f46494247c9298a6a3d9694f03f6a32898a07ffbe1c17a0752bae5c4e:????done???????????|++++++++++++++++++++++++++++++++++++++|
elapsed:?17.3s????????????????????????????????????????????????????????????????????total:??8.7?Mi?(513.8?KiB/s)
unpacking?linux/amd64?sha256:efc93af57bd255ffbfb12c89ec0714dd1a55f16290eb26080e3d1e7e82b3ea66...
done

本地鏡像列表查詢:

???→?ctr?i?ls
REF???????????????????????????????????????????????????????????????TYPE??????????????????????????????????????????????????????DIGEST??????????????????????????????????????????????????????????????????SIZE??????PLATFORMS????????????????????????????????????????????????????????????????????????????????LABELS
docker.io/library/nginx:alpine????????????????????????????????????application/vnd.docker.distribution.manifest.list.v2+json?sha256:efc93af57bd255ffbfb12c89ec0714dd1a55f16290eb26080e3d1e7e82b3ea66?9.3?MiB???linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x?-

這里需要注意PLATFORMS,它是鏡像的能夠運(yùn)行的平臺(tái)標(biāo)識(shí)。

將鏡像掛載到主機(jī)目錄:

???→?ctr?i?mount?docker.io/library/nginx:alpine?/mnt

???→?tree?-L?1?/mnt
/mnt
├──?bin
├──?dev
├──?docker-entrypoint.d
├──?docker-entrypoint.sh
├──?etc
├──?home
├──?lib
├──?media
├──?mnt
├──?opt
├──?proc
├──?root
├──?run
├──?sbin
├──?srv
├──?sys
├──?tmp
├──?usr
└──?var

18?directories,?1?file

將鏡像從主機(jī)目錄上卸載:

???→?ctr?i?unmount?/mnt

將鏡像導(dǎo)出為壓縮包:

???→?ctr?i?export?nginx.tar.gz?docker.io/library/nginx:alpine

從壓縮包導(dǎo)入鏡像:

???→?ctr?i?import?nginx.tar.gz

其他操作可以自己查看幫助:

???→?ctr?i?--help
NAME:
???ctr?images?-?manage?images

USAGE:
???ctr?images?command?[command?options]?[arguments...]

COMMANDS:
???check???????check?that?an?image?has?all?content?available?locally
???export??????export?images
???import??????import?images
???list,?ls????list?images?known?to?containerd
???mount???????mount?an?image?to?a?target?path
???unmount?????unmount?the?image?from?the?target
???pull????????pull?an?image?from?a?remote
???push????????push?an?image?to?a?remote
???remove,?rm??remove?one?or?more?images?by?reference
???tag?????????tag?an?image
???label???????set?and?clear?labels?for?an?image

OPTIONS:
???--help,?-h??show?help

對(duì)鏡像的更高級(jí)操作可以使用子命令 content,例如在線編輯鏡像的 blob 并生成一個(gè)新的 digest

???→?ctr?content?ls
DIGEST?????????SIZE?AGE??LABELS
...
...
sha256:fdd7fff110870339d34cf071ee90fbbe12bdbf3d1d9a14156995dfbdeccd7923?740B?7?days??containerd.io/gc.ref.content.2=sha256:4e537e26e21bf61836f827e773e6e6c3006e3c01c6d59f4b058b09c2753bb929,containerd.io/gc.ref.content.1=sha256:188c0c94c7c576fff0792aca7ec73d67a2f7f4cb3a6e53a84559337260b36964,containerd.io/gc.ref.content.0=sha256:b7199797448c613354489644be1f60aa2d8e9c2278989100c72ede3001334f7b,containerd.io/distribution.source.ghcr.fuckcloudnative.io=yangchuansheng/grafana-backup-tool

???→?ctr?content?edit?--editor?vim?sha256:fdd7fff110870339d34cf071ee90fbbe12bdbf3d1d9a14156995dfbdeccd7923

容器

創(chuàng)建容器:

???→?ctr?c?create?docker.io/library/nginx:alpine?nginx

???→?ctr?c?ls
CONTAINER????IMAGE?????????????????????????????RUNTIME
nginx????????docker.io/library/nginx:alpine????io.containerd.runc.v2

查看容器的詳細(xì)配置:

#?和?docker?inspect?類似
???→?ctr?c?info?nginx

其他操作可以自己查看幫助:

???→?ctr?c?--help
NAME:
???ctr?containers?-?manage?containers

USAGE:
???ctr?containers?command?[command?options]?[arguments...]

COMMANDS:
???create???????????create?container
???delete,?del,?rm??delete?one?or?more?existing?containers
???info?????????????get?info?about?a?container
???list,?ls?????????list?containers
???label????????????set?and?clear?labels?for?a?container
???checkpoint???????checkpoint?a?container
???restore??????????restore?a?container?from?checkpoint

OPTIONS:
???--help,?-h??show?help

任務(wù)

上面 create 的命令創(chuàng)建了容器后,并沒有處于運(yùn)行狀態(tài),只是一個(gè)靜態(tài)的容器。一個(gè) container 對(duì)象只是包含了運(yùn)行一個(gè)容器所需的資源及配置的數(shù)據(jù)結(jié)構(gòu),這意味著 namespaces、rootfs 和容器的配置都已經(jīng)初始化成功了,只是用戶進(jìn)程(這里是 nginx)還沒有啟動(dòng)。

然而一個(gè)容器真正的運(yùn)行起來(lái)是由 task 對(duì)象實(shí)現(xiàn)的,task 代表任務(wù)的意思,可以為容器設(shè)置網(wǎng)卡,還可以配置工具來(lái)對(duì)容器進(jìn)行監(jiān)控等。

所以還需要通過 task 啟動(dòng)容器:

???→?ctr?task?start?-d?nginx

???→?ctr?task?ls
TASK?????PID???????STATUS
nginx????131405????RUNNING

當(dāng)然,也可以一步到位直接創(chuàng)建并運(yùn)行容器:

???→?ctr?run?-d?docker.io/library/nginx:alpine?nginx

進(jìn)入容器:

#?和?docker?的操作類似,但必須要指定?--exec-id,這個(gè)?id?可以隨便寫,只要唯一就行
???→?ctr?task?exec?--exec-id?0?-t?nginx?sh

暫停容器:

#?和?docker?pause?類似
???→?ctr?task?pause?nginx

容器狀態(tài)變成了 PAUSED:

???→?ctr?task?ls
TASK?????PID???????STATUS
nginx????149857????PAUSED

恢復(fù)容器:

???→?ctr?task?resume?nginx

ctr 沒有 stop 容器的功能,只能暫?;蛘邭⑺廊萜?。

殺死容器:

???→?ctr?task?kill?nginx

獲取容器的 cgroup 信息:

#?這個(gè)命令用來(lái)獲取容器的內(nèi)存、CPU 和 PID 的限額與使用量。
???→?ctr?task?metrics?nginx
ID???????TIMESTAMP
nginx????2020-12-15?09:15:13.943447167?+0000?UTC

METRIC???????????????????VALUE
memory.usage_in_bytes????77131776
memory.limit_in_bytes????9223372036854771712
memory.stat.cache????????6717440
cpuacct.usage????????????194187935
cpuacct.usage_percpu?????[0?335160?0?5395642?3547200?58559242?0?0?0?0?0?0?6534104?5427871?3032481?2158941?8513633?4620692?8261063?3885961?3667830?0?4367411?356280?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?1585841?0?7754942?5818102?21430929?0?0?0?0?0?0?1811840?2241260?2673960?6041161?8210604?2991221?10073713?1111020?3139751?0?640080?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0?0]
pids.current?????????????97
pids.limit???????????????0

查看容器中所有進(jìn)程的 PID

???→?ctr?task?ps?nginx
PID???????INFO
149857????-
149921????-
149922????-
149923????-
149924????-
149925????-
149926????-
149928????-
149929????-
149930????-
149932????-
149933????-
149934????-
...

注意:這里的 PID 是宿主機(jī)看到的 PID,不是容器中看到的 PID。

命名空間

除了 k8s 有命名空間以外,Containerd 也支持命名空間。

???→?ctr?ns?ls
NAME????LABELS
default

如果不指定,ctr 默認(rèn)是 default 空間。

目前 Containerd 的定位還是解決運(yùn)行時(shí),所以目前他還不能完全替代 dockerd,例如使用 Dockerfile 來(lái)構(gòu)建鏡像。其實(shí)這不是什么大問題,我再給大家介紹一個(gè)大招:Containerd 和 Docker 一起用!

Containerd + Docker

事實(shí)上,Docker 和 Containerd 是可以同時(shí)使用的,只不過 Docker 默認(rèn)使用的 Containerd 的命名空間不是 default,而是 moby。下面就是見證奇跡的時(shí)刻。

首先從其他裝了 Docker 的機(jī)器或者 GitHub 上下載 Docker 相關(guān)的二進(jìn)制文件,然后使用下面的命令啟動(dòng) Docker:

???→?dockerd?--containerd?/run/containerd/containerd.sock?--cri-containerd

接著用 Docker 運(yùn)行一個(gè)容器:

???→?docker?run?-d?--name?nginx?nginx:alpine

現(xiàn)在再回過頭來(lái)查看 Containerd 的命名空間:

???→?ctr?ns?ls
NAME????LABELS
default
moby

查看該命名空間下是否有容器:

???→?ctr?-n?moby?c?ls
CONTAINER???????????????????????????????????????????????????????????IMAGE????RUNTIME
b7093d7aaf8e1ae161c8c8ffd4499c14ba635d8e174cd03711f4f8c27818e89a????-????????io.containerd.runtime.v1.linux

我艸,還可以醬紫?看來(lái)以后用 Containerd 不耽誤我 docker build 了~~

最后提醒一句:Kubernetes 用戶不用驚慌,Kubernetes 默認(rèn)使用的是 Containerd 的 k8s.io 命名空間,所以 ctr -n k8s.io 就能看到 Kubernetes 創(chuàng)建的所有容器啦,也不用擔(dān)心 crictl 不支持 load 鏡像了,因?yàn)?ctr -n k8s.io 可以 load 鏡像啊,嘻嘻?

參考資料

[1]

bucketbench: https://github.com/estesp/bucketbench

[2]

release 頁(yè)面: https://github.com/containerd/containerd/releases

[3]

Sealos: https://github.com/fanux/sealos


你可能還喜歡

點(diǎn)擊下方圖片即可閱讀

Goland 遠(yuǎn)程 Linux 環(huán)境開發(fā)真香!

云原生是一種信仰??



碼關(guān)注公眾號(hào)

后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!



點(diǎn)擊?"閱讀原文"?獲取更好的閱讀體驗(yàn)!

??給個(gè)「在看」,是對(duì)我最大的支持??
瀏覽 30
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 天天躁天干天干| 国产在线你懂得| 人人澡人人看| 哪里能看毛片| 国产女人在线视频| 94精品人人人| 强奸校花到高潮| 日日摸日日| 亚洲视频免费在线播放| 国产熟女一区二区三区五月婷| 成人日韩欧美| 成人无码区免费A片在线软件| 99久久精品国产成人一区二区 | 国产精品无码久久久久成人app | 久久精品999| 日日爱av| 亚洲三级无码视频| 免费看性蜜桃| 婷婷日韩中文字幕| 黄片免费看视频| 免费国产三级片| 精品无码AV一区二区三区| 超碰C| 无码AV网站| xxxxx日韩| 自拍偷拍图区| 国产日韩欧美成人| 性做久久久久久| 日韩免费| 国产丝袜视频| 黄片免费看网站| 成人色色| 国产成人久久777777| 久久午夜福利视频| 高清无码视频在线观看| 久久精品中文字幕| 欧美精品三级| 91国语又粗又大对白| 九九热视频99| 99久久成人| 日本亚洲欧洲免费| 91就要爱爱视频| 大香蕉69| 丝袜足交视频| 国产精品视频免费在线观看| 超碰极品| 水果派红桃AV解说| 最新中文字幕观看| 欧美三级片视频| 欧美伊人久久| 国产99久久久精品| H版视频| 自拍偷拍亚洲| 蜜桃av秘无码一区二区三欧 | 四川少妇搡BBw搡BBBB搡| 国产乱伦不卡| 国产视频导航| 乱伦三区| 亚洲精品播放| 国产无遮挡又黄又爽| www.日韩av| 国产一区在线观看视频| 亚洲成人福利电影| 天天干天天撸影视| 日韩无码毛片| a视频在线| 亚洲AV男人天堂| 日本操b| 无码内射在线播放| 欧美视频h| 51成人精品午夜福利| 天天摸天天添| 日韩欧美视频一区国产欧美在线 | 亚洲无码久久| 91成人在线观看学生和老师| 在线免费无码| 欧一美一婬一伦一区二区三区自慰| 中文字幕久久人妻无码精品蜜桃 | 又粗又硬又爽18级A片| 五月丁香啪啪| 久草在线| 综合伊人| 久久视频免费看| 边摸边操| 日本A片视频| 亚洲无码99| 国产又大又粗| 大香蕉久久久久久| 亚洲区欧美区| 日韩人妻av| 久久伊人在| 日日骚亚洲| 国产成人精品毛片| 爱爱免费视频| 91福利视频网| 婷婷五月激情中文字幕| 超碰在线人人操| 欧美操| 国产黄色三级| 亚洲免费小视频| 日韩午夜AV| 国内成人AV| 波多野结衣一区二区三区在线观看| 成人网大香蕉| 日本男人天堂| 精品亚洲一区二区三区四区五区| 天天舔天天干| 日韩欧美中文字幕公布| 91亚洲精品国偷拍自产在线观看 | 91AV在线播放| 中文字幕在线免费| 日韩成人在线视频| 男人天堂成人| 日本免费高清视频在线观看一区 | 亚洲高清无码在线| AV黄片| 无码一区二区三| 亚洲另类视频| 亚洲黄色电影在线观看| 欧美黄片网站| 亚洲男人天堂网| 五月天网址| 日韩欧美综合| 一级A片免费黄色视频| 91AV视频| 超碰激情| 日韩福利| 豆花视频免费观看| 亚洲综合免费观看高清完整| 欧美在线网址| 六月丁香综合| 国产黄色在线视频| 视色视频在线观看18| 婷婷久草网| 91狠狠色丁香婷婷综合久久| 北京熟妇搡BBBB搡BBBB电影 | 四虎成人网站| 亚韩av| 久久人搡人人玩人妻精AV香蕉| 伊人综合网站| 欧美日韩中| 日韩在线视频免费观看| 神马影院午夜福利| 色九九视频| 超碰人妻在线| 大地99中文在线观看| 特一级黄A片| 国产福利av| 欧美成人精品欧美一级| 午夜激情操一操| 国产又粗又大| 五月丁香狠狠爱| 久爱视频| 丰满欧美熟妇免费视频| 国产1区2区3区中文字幕| 蜜桃成人AV| 日韩一级大片| jizz久久| 久久激情国产| 久久美女视频| 久久久五月| 亚洲免费在线看| 超碰在线观看91| 黄片国产| 狠狠AV| 日本黄色中文字幕| 五月丁香六月激情综合| 親子亂子倫XXXX| 99激情视频| 黑人大肉棒| 做爱激情视频网站| 国产色情网站| 俄罗斯白嫩BBwBBwBBw91| 你懂的在线视频观看| 日韩AV电影在线观看| 在线婷婷| 日本三级片无码| 午夜激情在线观看| 国产嫩草精品A88AV| 国产高清无码网站| 欧美footjob高跟脚交| 人妻少妇无码视频| 亚洲激情欧美| 91无码人妻东京热精品一区| 三级丁香在线| 天天免费视频| 操极品少妇逼| 裸体黄色一极大片| 丰满岳乱妇一区二区三区全文阅读| 日韩欧美黄色片| 日韩精品三区| 色午夜| 亚洲男人的天堂视频网在线观看+720P | 国产一级麻豆| 日本黄色电影在线播放| 超碰在线免费| 久久久国产91桃色一区二区三区| 亚洲成人在线网| 亚洲激情综合视频| 欧美在线观看视频| 中文字幕永久免费| 亚洲国产三级片| 亚洲精品18禁| 国产伦精品一区二区三区妓女下载| 白虎高清无码大尺度免费在线观看 | 久久久久国产精品视频| 午夜亚洲| 蝌蚪窝在线观看| 午夜无码高清| 人妻无码一区二区三区| 操逼资源| 9I看片成人免费视频| 天天干天天操天天干| 成人高清无码在线| 人人操天天干| 欧美成人网站视频| 91视频免费在线观看| 韩国无码免费| 欧美亚洲日韩一区二区| 日本成人一区二区| 能看毛片的网站| 欧美婷婷五月| 一区二区三区久久久| 韩国精品无码一区二区三区18| 国产插穴| av六月天| 人妻无码中文字幕蜜桃| 在线免费观看国产视频| 人人爱人人妻人人操| 久草电影在线观看| 日本不卡在线观看| 色卻A| 亚洲在线视频观看| 久久久久久久性爱| 婷婷久久久久| 丝袜美腿亚洲综合| 成人无码区免费| 91麻豆精品国产91久久久吃药 | 人人操97| 成人福利免费视频| 中文字幕高清无码在线播放| 天天干夜夜操熟女| 日本操鸡小视频| 欧美日韩免费| 亚洲黄色电影在线观看| 亚洲一区二区视频| 婷婷五月天AV| 中文字幕视频在线| 日本无码嫩草一区二区| 国产91在线播放| 欧美性爱-熊猫成人网| 综合色播| 九九九中文字幕| 亚洲中文字幕免费视频| 成人伊人综合| 精品成人一区二区三区| 波多野结衣东京热| 影音先锋成人资源网| 欧美激情片| 亚洲精品免费在线观看| 国产97在线视频| 人与禽一级A片一区二区三区| 黄色大片视频| 久草大香蕉视频| 国产精品同| 九九热视频在线| 五月丁香六月激情综合| 少妇无码在线| 亚洲在线第一页| 国产骚女| 丰满岳乱妇一区二区三区全文阅读| 久久久久久免费毛片精品| 精品超碰| 亚洲无码入口| 性生活无码视频| www.97色| 韩国三级HD久久精品HD| 黄片小视频在线观看| 欧美肥臀| 手机在线看A片| 黄色AV网| 少妇白洁视频| 日韩午夜福利| 一本色道久久综合亚洲精品久久 | jt33免费观看高清| AAA日韩| 亚洲精品18禁| 日本一区二区三区在线播放| 中文字幕永久在线观看| 密臀AV在线| 99精品视频免费| 国产免费a| 97操逼| 国产无码激情视频| 天天爱天天射| 无码人妻一区二区一牛影视| 日本一级黃色大片看免费| 女人毛片| 狼友视频报放| 天堂在线视频免费| 啪啪视频m3u8| 亚洲成人av无码| 天堂AV在线免费观看| 亚洲免费黄色电影| 人妻视频在线| 中文字幕乱| 婷婷亚洲综合| www.日韩系列| 色婷婷Av一区| 婷婷福利导航| 午夜成人鲁丝片午夜精品| 国产精品永久免费| 日韩国产一区| 看国产毛片| 黄色大片久草| 黄色污污污网站| 亚洲黄色视频在线观看网站| 日韩性爱在线观看| 国产乱妇乱子伦视频免费观看让女人| 18精品爽视频| 麻豆精品传媒2021md| 先锋影音资源网站| 91日韩欧美| 操逼视频一区| 男女91视频| 久久另类TS人妖一区二区| 日韩色吧| 大香蕉av一区二区三区在线观看| 亚洲欧美成人片| 蜜桃系列一区二区精品| 久久久久伊人| 九九九九精品| 91在线无码精品秘软件| 亚洲三级毛片| 成人做爰黄AAA片免费直播岛国| 黄片www| 免费看A级片| 国产青青操| 久久久久久久久久成人| 亚洲无码视频免费| 免费小视频| 久久人人做| 中国美女一级黄片| 成人在线欧美| 日韩一区二区三区在线| 婷婷五月天社区| 最新国产第一页| 日韩美女久久| 99涩涩| 色哥网在线一区| 国产日韩欧美91| 亚洲欧美日本在线观看| 爱搞视频在线观看| 69激情网| 国产一级二级视频| 97人人操| 国产精品777777| 亚洲精品成AV人片天堂无码| 免费观看无码| 操美女91| 国产精品免费人成人网站酒店| 麻豆精品| aV一区二区三区| 欧美亚洲日韩中文字幕| 国产一区二区做爱| 亚洲无码中文视频| 老鸭窝在线观看视频| gogogo高清在线完整免费播放韩国 | 欧美成人午夜影院| 91丝袜一区在线观看| 青青草视频在线观看| 亚洲色婷婷在线| 国产美女av| 亚洲成人在线播放| 成年人视频免费| www天天干| 天天日天天操天天| 免费人成在线观看视频播放| 亚洲乱伦视频| 亚洲视频日韩在线观看| 亚洲中文字幕无码在线观看 | 亚洲一级内射| 日韩无码视频二区| 人人干人人上| 免费的毛片| 天天撸免费视频| 蜜桃视频在线观看视频| 毛片网页| WWW.99热| 国产精品一级片| 亚洲操逼AV| 99热黄| 大香蕉伊人电影| 激情五月在线| 在线成人一区二区| 超碰极品| 午夜18视频在线观看| 二区视频在线| 欧洲成人在线| 国产91www| 无码一道本一区二区无码| 18SAV| 免费观看一区二区三区| 九七色色电影| 69亚洲精品| 大香蕉尹人网| 激情爱爱网| 超碰在线99| 一本加勒比HEZYO东京热无码 | 亚洲黄片大全| 男人天堂手机视频| 天天爽夜夜| 天天干天天干天天| 成人性爱视频网站| 色欲国产精品欧美在线密| 中国熟女HD| 久久毛| 欧美一区二区三区成人片在线| 日韩精品成人| 日批动态图| 插进去综合网| 五月丁香花视频| 青青操逼| 1024在线| 欧美自拍性爱视频| 大香蕉免费在线观看| 天天色播| 国产成人免费看| 日本AI高清无码在线观看网址| 成人免费激情视频| 欧美三级在线播放| 黄A网站| 欧美综合网在线观看| 黄色无码电影| 精品人妻一区二区三区日产乱码| 岛国片资源| 国产91高跟丝袜| 欧美性爱无码| 秋霞丝鲁片一区二区三区手机在绒免 | 狠狠狠久久久| www.91国产| 亚洲videos| 欧美视频免费| 中国免费XXXX18| 影音先锋人妻资源| 第九色| AV在线大香蕉| 国产人妖在线观看| 小明成人免费视频| 91外围女视频| 在线天堂av| 国产黄色一级电影| 成人三区| 日本中文字幕免费| 看国产毛片| 日韩色吧| 在线观看一区二区三区四区| 丁香婷婷男人天堂| AV天堂无码| 嫩草国产在线| 大香蕉AV在线| 综合色婷婷| 老司机午夜免费精品视频| 免费成人黄片| 一本无码中文字幕| 丁香婷婷久久久综合精品国产 | 午夜福利大片| 日本AA片视频| 亚洲AⅤ欧美AⅤ| 国产精品视频久久久| 性免费网站| 亚洲秘AV无码一区二区qq群| 波多野结衣国产| 91精品国产乱码久久| 欧洲三级片| 亚洲黄色影视| 丁香婷婷五月基地| 欧美城综合在线观看网| 日本成人黄色视频| 日韩欧美成人在线观看| 精品蜜桃秘一区二区三区观看| 特级西西人体大胆无码| 91大香蕉视频| 亚洲日韩在线视频观看| 国产成人一区二区三区A片免费| 日本二区三区| 欧美性爱成人| 香蕉网站操逼片| 欧美日韩精品久久久免费观看| 五月婷在线观看| 十八禁网站在线观看| 亚洲综合无码| 五月丁香婷婷在线| 成人免费A片在线观看直播96 | 北条麻妃网站| 国产黄色视频免费在线观看| 国产乱码一区二区三区| 激情操逼| 久久久久久久大香蕉| 天天干免费视频| 在线中文字幕777| 国产suv精品一区二区| 狼人综合在线| 2017天天干天天射| 国产精品久久久久久亚洲毛片 | 成人国产欧美日韩在线视频| av在线精品| 少妇搡BBBB搡BBB搡造水多| 欧美自拍第一页| 黄色A网站| 日本在线观看| 色色丁香| 老婆被黑人杂交呻吟视频| 躁BBB躁BBB躁BBBBBB日视频| 欧美综合高清| 一级A片60分钟免费看| 国产va在线| 欧美色图色就是色| 无码不卡视频在线观看| 97超碰在线免费观看| 亚洲精品久久久久久久久豆丁网| 丁香六月久久| 天堂成人av| 玖玖爱AV| 爱爱视频免费看| 第一福利成人AV导航| 日本V片| 91AV免费看| 98在线++传媒麻豆的视频| 日本黄色免费视频| 久久午夜视频| 国产一级婬片A片免费无成人黑豆| 欧美一级成人| 精品一区二区免费视频| 中文字幕在线观看辣文| 97精品| 天天操夜夜撸| 亚洲国产无码在线| 亚洲.无码.制服.日韩.中文字幕| 成人H动漫精品一区二区无码| 成人黄色毛片视频| 午夜3D动漫AV| 影音先锋成人电影| 亚洲高清无码视频在线观看| 亚洲五月婷| 中文字幕观看在线| 色秘乱码一区二区三区唱戏| 91久久亚洲| BBB搡BBB搡BBB搡BBB| 日韩黄色精品| 日韩三级黄色| 国产精品一区二区AV日韩在线 | 日韩在线精品视频| 26uuu亚洲| 波多野结衣一级婬片A片免费下载| 国产欧美日韩视频| 伊人黄色视频| 亚洲国产成人无码a在线播放| 午夜性爱网址| 国产一区在线播放| 操日视频| 免费观看一级A片| 先锋影音资源站av每日资源在线| 97一区二区| 国产精品揄拍一区二区| 黄片伊人| 先锋影音av在线| 日韩成人一区二区三区| 日韩在线精品视频| 黑巨茎大战欧美白妞小说| 青娱乐老视频| 97精品在线观看| av网站在线免费观看| 伊人精品A片一区二区三区| 中国免费XXXX18| 手机av在线观看| 中文无码不卡| 操b视频免费| 亚洲欧美日韩成人| 国产精品自拍在线观看| 91色图| 麻豆熟妇乱妇熟色A片在线看| 99免费视频在线| 欧美二区视频| 亚洲高清视频在线播放| 亚洲视频观看| 久久综合无码内射国产| 69国产精品视频免费观看| 性爱91视频| 久久亚洲AV无码午夜麻豆| 青娱乐国产精品一区二区| 亚洲天堂在线免费观看视频| 亚洲午夜激情电影| 亚洲AV无码成人精品一区| 免费国产成人看片在线| 91丨九色丨熟女泻火| 玖玖av| 亚洲国产熟妇无码日韩| 好色婷婷| 国产欧美精品一区二区色综合| 69视频国产| 91婷婷五月天| 超碰精品在线| 日韩精品一区二区三区使用方法| 天天干天天操天天| 日韩三区| 黄色777| 超碰人人干人人操| 天天干欧美| 亚洲欧美成人视频| 亚洲男人的天堂视频网在线观看+720P | 四川妇搡BBBB搡BBBB| 梁祝艳谭A级毛片| 大香蕉综合网站| 国产成人AV在线观看| 黄色A片免费看| 国产艹逼视频| 性爱视频网址| 无码av观看| 噼里啪啦免费观看视频大全| 国产网友自拍| 精品黄色片| 中日韩免费视频| 另类老妇videos另类| 操逼操| 久久免费看视频| 青青无码视频| 日中文字幕| 色综合久久天天综合网| 性爱视频免费网站| 国产精品国产伦子伦露看| 麻豆少妇| 国产黄片一区二区三区| 久久理论| 蜜桃AV在线播放| 神马午夜福利视频| 亚洲无人禁区| 二区三区视频| 91无码AⅤ在线| 东京热一区二区三区| 亚洲激情在线| 伊人av网| 三级大香蕉| 久久久精品免费视频| 乱子伦】国产精品| 人妻大屁股-91Porn| 国产亚洲av| 大学生18一19GAY169| 国产黄色小视频在线观看| 性满足BBWBBWBBW| 日韩无码电影网| 久热最新| 中文字幕一二三| 人人看,人人摸| 亚洲爱爱网| 九九九免费视频| 久久九九国产精品怡红院| 久热国产在线| 小泬BBBBBB免费看| 欧美三P囗交做爰| 西西西444www无码视频| 日日操日日摸| 久久亚洲国产| 成人视频123| 操操操综合| 熟女久久| 日韩精品在线视频| 亚洲无码十八禁| 成人AV三级片| a在线免费观看| 欧美午夜片| 波多野结衣在线观看一区二区| 国产无码免费在线观看| 美女黄网站| 97在线资源| 男女啊啊啊| 波多野结衣无码高清| 欧美一级生活片| 欧美一区二区三区精品| 无码视频免费| 亚洲射射| 高清无码二区| 97爱爱| 大香蕉熟女| 伊人影院在线视频| 欧美日本成人网站入口| 无码一区视频| 日韩人妻一区二区三区| 欧美黄片在线免费看| 人人干人人干人人干| 五月天福利导航| 日韩无码视频播放| 丰满岳乱妇一区二区三区全文阅读| 亚洲电影在线观看| 第一色网站| 巜痴漢電車~凌脔版2| 成人抽插视频| 97超碰资源站| 九九视频免费在线观看| 久亚洲| 波多野结衣国产| 日本一区二区三区免费看| 亚洲aⅤ| 成人在线视频免费观看| 超碰免费人人| AV在线直播| 国产亚洲婷婷| AV无码电影| 午夜探花视频| 极品美鮑20p| 亚洲AV在线观看| 天天干91| 欧美三级在线视频| 白峰美羽人妻AND-499| 丁香五月婷婷五月天| 天天影视综合网免费观看电视剧国产| 成人在线中文| 9I成人免费版| 日韩第五页| 第一色影院| 黄色视频大全免费看| 精品免费国产一区二区三区四区| 偷偷操av| 国产精品五月天| 成人黄色在线视频| 一区二区三区四区五区| 无码精品ThePorn| 国产成人综合电影| 五月婷婷中文| 日韩图片区小说视频区日| 少妇推油呻吟白浆啪啪成人片| 欧美在线播放| 三级黄片网站| 日韩欧美一级| 一区在线免费观看| AV天堂影视在线观看| 成人黄色AV| 欧美黄片AAA| 91国语对白| 久久精品国产AV一区二区三区| 91蝌蚪视频在线播放| 69精品视频| 亚洲jizzjizz| 亚洲AV无码乱码国产精品蜜芽| 亚洲国产成人精品午夜| 亚洲三级黄色| 老司机福利在线视频| 99热在线观看精品免费| 欧美操大逼| 三级黄视频| www.五月天婷婷| 操逼a片| 97人妻人人澡人人| 欧美日韩国产精品| 精品永久免费| 制服丝袜无码| 欧美成人精品激情在线视频| 手机在线看片av| 国产精品观看| 国产最新福利| 波多野结衣不卡| 久久牛牛| 巨爆乳肉感一区二区三区视频 | 色婷婷电影| 亚洲操逼电影| 免费看AV大片| 亚洲精品成a人在线观看| 亚洲无码av网站| 亚洲一级二级| 亚洲无码视频一区二区| 中文字幕精品一区久久久久| 欧美成人猛片AAAAAAA| 秋霞一区二区| 成人性视频Aⅴ| 成人午夜无码福利视频| 中文字幕第72页| 2014亚洲天堂| 四虎欧美| 69成人在线电影| 大香蕉精品欧美色综合2025| 亚洲无码精品在线观看| 青青操日日干| 亚洲欧美日韩黑料吃瓜在线观看| 日韩无码www| 丁香六月激情婷婷| 大秀91视频| 97色在线| 中文字幕在线一区二区a| 国产精品三级在线| 久久99久久99久久99国内少妇精品 | 国产亚洲aⅴ| 一级特黄大片录像i| 日韩中文字幕在线人成网站| 中文字幕日韩一| 超碰777| 欧洲性爱视频| 久草视频新| 中文字幕亚洲视频| 99免费在线观看视频| 国产又爽又黄视频在线看| 懂色在线精品分类视频| 五月色综合| 欧美一级特黄AAAAAA片| 无码69| H版视频| 51成人网| 亚洲天堂网在线视频| 无码69| 日韩免费在线观看一区入口| 久久久久免费视频| 日韩婬乱片A片AAA真人视频| xxxxx无码| 国产十欧洲十美国+亚洲一二三区在线午夜 | 久久久久人| 五月丁香婷婷综合| 99久| 亚洲成人性爱视频| 色丁香五月| 亚洲精品中文字幕在线| 91av成人| 久久久久久久久久久成人| 日本无码精品| 一级黄色影院| 国产成人一区二区三区A片免费| 婷久久| 亚洲国产精品二二三三区| 无码逼逼| 波多野结衣无码NET,AV| 肏屄视频在线观看| 人人妻人人爽人人澡人人精品| 影音先锋国产av| 怡红院成人在线| 久久久XXX| 亚洲精品秘一区二区三区蜜桃久 | 午夜综合在线| 欧美v在线观看| 91精品人妻人人爽| 欧美高清无码| 中文字幕第一区| 无码一卡| 国产精品污www在线观看| 手机在线操B视频| 国产成人V在线精品一区| 大香蕉精品欧美色综合2025 | 精品码一区二在线观看| 国产香蕉视频在线观看| 国产精品久久久久久久9999 | 国产性综合| 亚洲福利女神成人福利| 一夲道无码专区av无码A片| 黄色一级片免费| 九九伊人大香蕉| 逼特逼视频网站| 天天操天天操| 成人精品在线| 精品偷拍视频| 亚洲视频中文字幕| 97人人射| 亚洲日韩欧美成人| 成人免费黄色网| 少妇无码一区| 亚洲国产高清在线观看视频| 国产免费无码| 香蕉久久久| 91免费小视频| 日韩无码视| 亚洲色图成人网| 亚洲区成人777777精品| 69欧美| 亚州在线中文字幕经典a| 日韩啊啊啊| 一区二区三区水蜜桃| 99精品国产热久久91色欲| 中文字幕一区二区蜜桃| 亚洲在线| 精品无码国产一区二区三区51安| 国产激情网站| 专区无日本视频高清8| 亚洲午夜成人| 日本乱伦中文字幕| 黑人人妻黑人ThePorn| 91在线无精精品秘白丝| 黄色特级毛片| 中文无码一区二区三区| 日本99热| 成人做爰A片免费看网站| 超碰天天操| 91视频人人| 中文字幕第69页| 国产毛片一区二区| 九九福利视频| 亚洲欧美v| 三级在线观看视频| 永久免费看片视频| 青青超碰| 夜夜操天天操| 国产午夜在线| 波多野结衣亚洲| 欧美日在线| 成人精品免费视频|