精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

讀讀 Pause 容器源碼

開發 開發工具
都知道 k8s 的調度最小單位是 POD, 并且每個 POD 都有一個所謂的 Infra 容器 Pause, 負責初始化相關 namespace, 先于 POD 內其它容器起動。那么到底什么是 Pause 容器呢?長什么樣?有什么作用?

[[397735]]

本文轉載自微信公眾號「董澤潤的技術筆記」,作者董澤潤。轉載本文請聯系董澤潤的技術筆記公眾號。

都知道 k8s 的調度最小單位是 POD, 并且每個 POD 都有一個所謂的 Infra 容器 Pause, 負責初始化相關 namespace, 先于 POD 內其它容器起動。那么到底什么是 Pause 容器呢?長什么樣?有什么作用?

分析源碼

廢話不多,直接上源碼,來自官方 pause.c[1]

  1. #include <signal.h> 
  2. #include <stdio.h> 
  3. #include <stdlib.h> 
  4. #include <string.h> 
  5. #include <sys/types.h> 
  6. #include <sys/wait.h> 
  7. #include <unistd.h> 
  8.  
  9. #define STRINGIFY(x) #x 
  10. #define VERSION_STRING(x) STRINGIFY(x) 
  11.  
  12. #ifndef VERSION 
  13. #define VERSION HEAD 
  14. #endif 
  15.  
  16. static void sigdown(int signo) { 
  17.   psignal(signo, "Shutting down, got signal"); 
  18.   exit(0); 
  19.  
  20. static void sigreap(int signo) { 
  21.   while (waitpid(-1, NULL, WNOHANG) > 0) 
  22.     ; 
  23.  
  24. int main(int argc, char **argv) { 
  25.   int i; 
  26.   for (i = 1; i < argc; ++i) { 
  27.     if (!strcasecmp(argv[i], "-v")) { 
  28.       printf("pause.c %s\n", VERSION_STRING(VERSION)); 
  29.       return 0; 
  30.     } 
  31.   } 
  32.  
  33.   if (getpid() != 1) 
  34.     /* Not an error because pause sees use outside of infra containers. */ 
  35.     fprintf(stderr, "Warning: pause should be the first process\n"); 
  36.  
  37.   if (sigaction(SIGINT, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0) 
  38.     return 1; 
  39.   if (sigaction(SIGTERM, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0) 
  40.     return 2; 
  41.   if (sigaction(SIGCHLD, &(struct sigaction){.sa_handler = sigreap, 
  42.                                              .sa_flags = SA_NOCLDSTOP}, 
  43.                 NULL) < 0) 
  44.     return 3; 
  45.  
  46.   for (;;) 
  47.     pause(); 
  48.   fprintf(stderr, "Error: infinite loop terminated\n"); 
  49.   return 42; 

可以看到 Pause 容器做如下兩件事情:

  1. 注冊各種信號處理函數,主要處理兩類信息:退出信號和 child 信號。收到 SIGINT 或是 SIGTERM 后,直接退出。收到 SIGCHLD 信號,調用 waitpid, 回收退出進程
  2. 主進程 for 循環調用 pause() 函數,使進程進入休眠狀態,直到被終止或是收到信號

可疑的 waitpid

還是 c 的基礎不夠扎實,一直以為 waitpid 是父進程等待回收退出的子進程,但是真的這樣嘛?

  1. zerun.dong$ man waitpid 
  2. WAIT(2)                     BSD System Calls Manual                    WAIT(2) 
  3.  
  4. NAME 
  5.      wait, wait3, wait4, waitpid -- wait for process termination 
  6.  
  7. SYNOPSIS 
  8.      #include <sys/wait.h> 

在 mac 上查看 man 手冊,wait for process termination 也確實這么寫的。登到 ubuntu 18.04 查看一下

  1. :~# man waitpid 
  2. WAIT(2)                                                      Linux Programmer's Manual                                                      WAIT(2) 
  3.  
  4. NAME 
  5.        wait, waitpid, waitid - wait for process to change state 

對于 linux man 手冊,就變成了 wait for process to change state 等待進程的狀態變更!!!

  1. All of these system calls are used to wait for state changes in a child of the calling process, and obtain information about the child whose 
  2. state has changed.  A state change is considered to be: the child terminated; the child was stopped by a signal; or the child was resumed by 
  3. a  signal.   In the case of a terminated child, performing a wait allows the system to release the resources associated with the child; if a 
  4. wait is not performed, then the terminated child remains in a "zombie" state (see NOTES below). 

并且還很貼心的提供了測試代碼

  1. #include <sys/wait.h> 
  2. #include <stdlib.h> 
  3. #include <unistd.h> 
  4. #include <stdio.h> 
  5.  
  6. int main(int argc, char *argv[]) 
  7.    pid_t cpid, w; 
  8.    int wstatus; 
  9.  
  10.    cpid = fork(); 
  11.    if (cpid == -1) { 
  12.        perror("fork"); 
  13.        exit(EXIT_FAILURE); 
  14.    } 
  15.  
  16.    if (cpid == 0) {            /* Code executed by child */ 
  17.        printf("Child PID is %ld\n", (long) getpid()); 
  18.        if (argc == 1) 
  19.            pause();                    /* Wait for signals */ 
  20.        _exit(atoi(argv[1])); 
  21.  
  22.    } else {                    /* Code executed by parent */ 
  23.        do { 
  24.            w = waitpid(cpid, &wstatus, WUNTRACED | WCONTINUED); 
  25.            if (w == -1) { 
  26.                perror("waitpid"); 
  27.                exit(EXIT_FAILURE); 
  28.            } 
  29.  
  30.            if (WIFEXITED(wstatus)) { 
  31.                printf("exited, status=%d\n", WEXITSTATUS(wstatus)); 
  32.            } else if (WIFSIGNALED(wstatus)) { 
  33.                printf("killed by signal %d\n", WTERMSIG(wstatus)); 
  34.            } else if (WIFSTOPPED(wstatus)) { 
  35.                printf("stopped by signal %d\n", WSTOPSIG(wstatus)); 
  36.            } else if (WIFCONTINUED(wstatus)) { 
  37.                printf("continued\n"); 
  38.            } 
  39.        } while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus)); 
  40.        exit(EXIT_SUCCESS); 
  41.    } 

子進程一直處于 pause 狀態,而父進程則調用 waitpid 等待子進程狀態變更。讓我們開啟一個 session 運行代碼,另外一個 session 發送信號

  1. ~$ ./a.out 
  2. Child PID is 70718 
  3. stopped by signal 19 
  4.  
  5. continued 
  6. stopped by signal 19 
  7. continued 
  8. ^C 
  9. ~# ps aux | grep a.out 
  10. zerun.d+   70717  0.0  0.0   4512   744 pts/0    S+   06:48   0:00 ./a.out 
  11. zerun.d+   70718  0.0  0.0   4512    72 pts/0    S+   06:48   0:00 ./a.out 
  12. root       71155  0.0  0.0  16152  1060 pts/1    S+   06:49   0:00 grep --color=auto a.out 
  13. ~# 
  14. ~# kill -STOP 70718 
  15. ~# 
  16. ~# ps aux | grep a.out 
  17. zerun.d+   70717  0.0  0.0   4512   744 pts/0    S+   06:48   0:00 ./a.out 
  18. zerun.d+   70718  0.0  0.0   4512    72 pts/0    T+   06:48   0:00 ./a.out 
  19. root       71173  0.0  0.0  16152  1060 pts/1    S+   06:49   0:00 grep --color=auto a.out 
  20. ~# 
  21. ~# kill -CONT 70718 
  22. ~# 
  23. ~# ps aux | grep a.out 
  24. zerun.d+   70717  0.0  0.0   4512   744 pts/0    S+   06:48   0:00 ./a.out 
  25. zerun.d+   70718  0.0  0.0   4512    72 pts/0    S+   06:48   0:00 ./a.out 
  26. root       71296  0.0  0.0  16152  1056 pts/1    R+   06:49   0:00 grep --color=auto a.out 

通過向子進程發送信號 STOP CONT 來控制進程。

看來不同操作系統,同名 c 函數行為是不太一樣的。大驚小怪,就是菜:(

共享哪些 NS

一般提起 POD 就知道,同一個 POD 內的容器如果互相訪問,只需調用 localhost 即可。如果把 k8s 集群想象成分布式操作系統,那么 POD 就是進程組的概念,一定要共享某些東西的,那么默認共享哪些 namespace 呢?

使用 minikube 搭建環境,先看一下 POD 定義文件

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: nginx 
  5. spec: 
  6.   shareProcessNamespace: true 
  7.   containers: 
  8.   - name: nginx 
  9.     image: nginx 
  10.   - name: shell 
  11.     image: busybox 
  12.     securityContext: 
  13.       capabilities: 
  14.         add
  15.         - SYS_PTRACE 
  16.     stdin: true 
  17.     tty: true 

從 1.17 開始有參數 shareProcessNamespace 用來控制是否 POD 內共享 PID namespace, 1.18 之后默認是 false 的,如果有需求需要填寫該字段。

  1. ~$ kubectl attach -it nginx -c shell 
  2. If you don't see a command prompt, try pressing enter. 
  3. / # ps aux 
  4. PID   USER     TIME  COMMAND 
  5.     1 root      0:00 /pause 
  6.     8 root      0:00 nginx: master process nginx -g daemon off
  7.    41 101       0:00 nginx: worker process 
  8.    42 root      0:00 sh 
  9.    49 root      0:00 ps aux 

attach 到 shell 容器中,可以看到該 POD 內所有進程,并且只有 pause 容器是 init 1 進程。

  1. / # kill -HUP 8 
  2. / # ps aux 
  3. PID   USER     TIME  COMMAND 
  4.     1 root      0:00 /pause 
  5.     8 root      0:00 nginx: master process nginx -g daemon off
  6.    42 root      0:00 sh 
  7.    50 101       0:00 nginx: worker process 
  8.    51 root      0:00 ps aux 

測試給 nginx master 發送 HUP 信號,子進程重啟。

如果不共享 PID ns, 那么每個容器內的進程 pid 都是 init 1 進程。共享 PID ns 有什么影響呢?參考這篇文章[2]

容器進程不再具有 PID 1。在沒有 PID 1 的情況下,一些容器鏡像拒絕啟動(例如,使用 systemd 的容器),或者拒絕執行 kill -HUP 1 之類的命令來通知容器進程。在具有共享進程命名空間的 pod 中,kill -HUP 1 將通知 pod 沙箱(在上面的例子中是 /pause)。

進程對 pod 中的其他容器可見。這包括 /proc 中可見的所有信息,例如作為參數或環境變量傳遞的密碼。這些僅受常規 Unix 權限的保護。

容器文件系統通過 /proc/$pid/root 鏈接對 pod 中的其他容器可見。這使調試更加容易,但也意味著文件系統安全性只受文件系統權限的保護。

在宿主機查看 nginx, sh 的進程 id, 通過 /proc/pid/ns 查看 namespace id

  1. ~# ls -l /proc/140756/ns 
  2. total 0 
  3. lrwxrwxrwx 1 root root 0 May  6 09:08 cgroup -> 'cgroup:[4026531835]' 
  4. lrwxrwxrwx 1 root root 0 May  6 09:08 ipc -> 'ipc:[4026532497]' 
  5. lrwxrwxrwx 1 root root 0 May  6 09:08 mnt -> 'mnt:[4026532561]' 
  6. lrwxrwxrwx 1 root root 0 May  6 09:08 net -> 'net:[4026532500]' 
  7. lrwxrwxrwx 1 root root 0 May  6 09:08 pid -> 'pid:[4026532498]' 
  8. lrwxrwxrwx 1 root root 0 May  6 09:08 pid_for_children -> 'pid:[4026532498]' 
  9. lrwxrwxrwx 1 root root 0 May  6 09:08 user -> 'user:[4026531837]' 
  10. lrwxrwxrwx 1 root root 0 May  6 09:08 uts -> 'uts:[4026532562]' 
  11. ~# ls -l /proc/140879/ns 
  12. total 0 
  13. lrwxrwxrwx 1 root root 0 May  6 09:08 cgroup -> 'cgroup:[4026531835]' 
  14. lrwxrwxrwx 1 root root 0 May  6 09:08 ipc -> 'ipc:[4026532497]' 
  15. lrwxrwxrwx 1 root root 0 May  6 09:08 mnt -> 'mnt:[4026532563]' 
  16. lrwxrwxrwx 1 root root 0 May  6 09:08 net -> 'net:[4026532500]' 
  17. lrwxrwxrwx 1 root root 0 May  6 09:08 pid -> 'pid:[4026532498]' 
  18. lrwxrwxrwx 1 root root 0 May  6 09:08 pid_for_children -> 'pid:[4026532498]' 
  19. lrwxrwxrwx 1 root root 0 May  6 09:08 user -> 'user:[4026531837]' 
  20. lrwxrwxrwx 1 root root 0 May  6 09:08 uts -> 'uts:[4026532564]' 

可以看到這里共享了 cgroup, ipc, net, pid, user. 這里僅限于測試案例。

殺掉 Pause 容器

測試一下殺掉 Pause 容器的話,k8s 是如何處理 POD. 使用 minikube 搭建環境,先看一下 POD 定義文件

  1. apiVersion: v1 
  2. kind: Pod 
  3. metadata: 
  4.   name: nginx 
  5. spec: 
  6.   shareProcessNamespace: false 
  7.   containers: 
  8.   - name: nginx 
  9.     image: nginx 
  10.   - name: shell 
  11.     image: busybox 
  12.     securityContext: 
  13.       capabilities: 
  14.         add
  15.         - SYS_PTRACE 
  16.     stdin: true 
  17.     tty: true 

啟動后,查看 pause 進程 id, 然后殺掉

  1. ~$ kubectl describe pod nginx 
  2. ...... 
  3. Events: 
  4.   Type    Reason          Age                   From     Message 
  5.   ----    ------          ----                  ----     ------- 
  6.   Normal  SandboxChanged  3m1s (x2 over 155m)   kubelet  Pod sandbox changed, it will be killed and re-created. 
  7.   Normal  Killing         3m1s (x2 over 155m)   kubelet  Stopping container nginx 
  8.   Normal  Killing         3m1s (x2 over 155m)   kubelet  Stopping container shell 
  9.   Normal  Pulling         2m31s (x3 over 156m)  kubelet  Pulling image "nginx" 
  10.   Normal  Pulling         2m28s (x3 over 156m)  kubelet  Pulling image "busybox" 
  11.   Normal  Created         2m28s (x3 over 156m)  kubelet  Created container nginx 
  12.   Normal  Started         2m28s (x3 over 156m)  kubelet  Started container nginx 
  13.   Normal  Pulled          2m28s                 kubelet  Successfully pulled image "nginx" in 2.796081224s 
  14.   Normal  Created         2m25s (x3 over 156m)  kubelet  Created container shell 
  15.   Normal  Started         2m25s (x3 over 156m)  kubelet  Started container shell 
  16.   Normal  Pulled          2m25s                 kubelet  Successfully pulled image "busybox" in 2.856292466s 

k8s 檢測到 pause 容器狀態異常,就會重啟該 POD, 其實也不難理解,無論是否共享 PID namespace, infra 容器退出了,POD 必然要重啟,畢竟生命周期是與 infra 容器一致的。

參考資料

[1]pause.c: https://github.com/kubernetes/kubernetes/blob/master/build/pause/linux/pause.c,

[2]share proceess namespace: https://kubernetes.io/zh/docs/tasks/configure-pod-container/share-process-namespace/,

 

責任編輯:武曉燕 來源: 董澤潤的技術筆記
相關推薦

2023-09-21 07:24:52

2023-06-14 08:49:22

PodKubernetes

2020-02-27 21:24:31

JavaAIOBIO

2017-03-06 17:02:21

戴爾

2023-09-22 08:39:00

sleep函數語言

2017-01-16 11:56:21

戴爾

2025-03-14 10:37:24

SpringSpring IOC容器

2025-05-21 10:09:09

Spring 5.xIOC編程

2025-08-12 05:00:00

2020-05-09 14:58:35

Intel PAUSMySQL性能

2011-07-13 15:07:48

STLC++

2022-09-06 10:18:39

微型容器鏡像微服務

2011-07-13 14:49:31

STLC++

2024-03-20 10:46:00

云原生容器

2015-03-31 18:26:43

陌陌社交

2020-12-21 09:44:06

Google Transforme技術

2015-05-05 14:16:22

容器技術CoreOSGoogle

2022-07-18 11:13:07

容器安全Docker

2024-10-15 09:10:41

Docker容器iOS

2022-07-25 14:24:53

Docker容器安全
點贊
收藏

51CTO技術棧公眾號

热久久久久久| 二区三区在线| 免费精品视频| 日韩中文av在线| 三上悠亚 电影| 涩涩av在线| 中文字幕在线视频一区| 国产精品一区二区欧美| 狠狠躁夜夜躁人人爽视频| 波多野结衣加勒比| 精品国产无码AV| 亚洲综合国产| 久久国产精品网站| 中文幕无线码中文字蜜桃| 999色成人| 色屁屁一区二区| 日韩一级特黄毛片| 岛国视频免费在线观看| 高清av一区二区| 国产精品日韩在线观看| 日韩黄色三级视频| 日韩综合一区| 亚洲精品91美女久久久久久久| 亚洲这里只有精品| 爱搞国产精品| 亚洲黄色av一区| 亚洲草草视频| 男人av在线| 白白色亚洲国产精品| 国产日韩av在线| 免费av中文字幕| 亚洲精选国产| 欧美黑人巨大精品一区二区| 中国1级黄色片| 久久99高清| 日韩电影第一页| 岛国精品一区二区三区| 懂色av色香蕉一区二区蜜桃| 一区二区福利| 91一区一区三区| 成人在线视频网| 国产偷人爽久久久久久老妇app | 日韩av在线免播放器| 91热视频在线观看| 在线成人免费| 欧美猛男超大videosgay| 天天影视综合色| 桃花岛成人影院| 日韩欧美亚洲成人| 日韩av片在线看| 九色porny丨入口在线| 亚洲国产精品欧美一二99| 欧美另类videos| 日本孕妇大胆孕交无码| 一区二区三区在线观看视频| 亚洲av首页在线| 中文字幕有码在线观看| 亚洲黄网站在线观看| 草草草视频在线观看| av人人综合网| 精品日本高清在线播放| 日韩在线综合网| 欧美人与性动交xxⅹxx| 在线精品视频免费播放| 日韩手机在线观看视频| 亚洲欧洲美洲av| 欧美在线一区二区三区| 亚洲77777| 一区在线不卡| 日韩欧美亚洲国产精品字幕久久久| 波多野结衣中文字幕在线播放| 日日狠狠久久| 日韩你懂的在线播放| 日本一区二区在线观看视频| 欧美日韩另类图片| 亚洲色图18p| 日本成人免费在线观看| 欧美一区激情| 91sa在线看| 日本一区二区三区久久| 国产精品一二三四五| 国产一区在线免费| h网站视频在线观看| 亚洲美女屁股眼交| 激情深爱综合网| 三级成人在线| 日韩欧美中文一区二区| 超碰97在线资源站| 国产精品91一区二区三区| 欧美国产乱视频| 国产成人精品777777| 久久精品国产999大香线蕉| 99re在线| 国产精品麻豆一区二区三区| 亚洲日本在线观看| 国产白丝袜美女久久久久| 成人午夜毛片| 亚洲成人av片| 国产又色又爽又高潮免费| 韩国自拍一区| 国产日韩精品电影| 神马电影在线观看| 亚洲视频一二三区| aaaaaa亚洲| 亚洲精品v亚洲精品v日韩精品| 亚洲人成亚洲人成在线观看| 久草视频在线资源| 免费观看成人av| 精品国产一区二区三区四区精华 | 日韩激情视频| 日本中文字幕在线播放| 亚瑟在线精品视频| 亚洲人视频在线| 首页亚洲中字| 欧美老少配视频| 自拍偷拍色综合| 99久久er热在这里只有精品15| 一区二区三区免费看| 涩涩网在线视频| 日韩欧美激情四射| 91无套直看片红桃在线观看| 一本久道久久久| 99r国产精品视频| 日本中文字幕伦在线观看| 精品日本高清在线播放| 99久久久无码国产精品性波多 | www.99视频| 中文字幕av不卡| 黄色片久久久久| 美女av一区| 欧美精品精品精品精品免费| 99久久久国产精品无码免费| 欧美国产精品v| 国产亚洲天堂网| 欧美18xxxx| 久久久免费高清电视剧观看| 国产xxxx在线观看| 亚洲天天做日日做天天谢日日欢 | 国产精品一区在线观看你懂的| 色乱码一区二区三在线看| 婷婷电影在线观看| 日韩精品视频免费专区在线播放| 国产一级黄色av| 国产精品自拍一区| 男女啪啪免费观看| 精品国产一区二| 欧美xxxx18性欧美| 国产ts人妖调教重口男| 一区二区三区视频在线看| 欧美又黄又嫩大片a级| 999久久久免费精品国产| 国产精品爽黄69| 日p在线观看| 日韩一区二区在线看| 真实国产乱子伦对白在线| 国产乱对白刺激视频不卡| 国产成人三级视频| 2020最新国产精品| 韩国福利视频一区| 亚洲色图欧美视频| 日韩欧美国产成人| 欧美黄色高清视频| 久久精品久久久精品美女| 香蕉精品视频在线| 欧洲大片精品免费永久看nba| 欧美xxxx18国产| 少妇高潮一区二区三区99小说| 五月天激情综合| 国产免费看av| 麻豆精品一二三| 桥本有菜av在线| 亚洲不卡视频| 青青草一区二区| 91九色在线porn| 91精品国产欧美一区二区成人| 激情小说中文字幕| 91在线观看高清| 亚州精品一二三区| 欧美男插女视频| 激情五月激情综合| 国产福利91精品一区二区三区| 日本xxx免费| 国产精品久久久网站| 欧美一级高清免费| 成人亚洲综合天堂| 欧美一二三四在线| 五月天婷婷激情| 日韩码欧中文字| 人妻无码中文久久久久专区| 日日嗨av一区二区三区四区| 中文字幕色一区二区| 国产在线播放精品| 国产精品色午夜在线观看| 欧美女同一区| 国产一区二区三区日韩欧美| 国产偷拍一区二区| 色综合久久中文综合久久牛| 国产精品丝袜一区二区| 久久先锋资源网| 天天操夜夜操很很操| 亚洲在线观看| 久久人妻无码一区二区| 国产精品zjzjzj在线观看| 国产精品黄页免费高清在线观看| 欧美日韩经典丝袜| 日韩中文字幕欧美| 你懂的视频在线免费| 日韩一区二区三区高清免费看看| 高清乱码免费看污| 亚洲在线观看免费| 四虎永久免费地址| 久久久久久久久久看片| 亚洲国产精品狼友在线观看| 久久爱www久久做| 男人操女人免费软件| 欧美日韩亚洲一区二区三区在线| 日韩亚洲一区在线播放| 美国一区二区| 国产精品swag| 国产精品免费精品自在线观看| 国产成人一区三区| 春色校园综合激情亚洲| 欧美成人四级hd版| 91在线播放网站| 国产一区二区动漫| 婷婷国产在线| 亚洲大胆人体av| 国内精品久久久久久久久久久| 欧美亚洲精品一区| 日韩不卡视频在线| 亚洲成人tv网| 曰本女人与公拘交酡| 一区视频在线播放| 欧美成人久久久免费播放| 国产香蕉久久精品综合网| 免费成人深夜夜行p站| 不卡视频一二三四| 亚洲婷婷在线观看| 成人黄色国产精品网站大全在线免费观看| 欧美成人乱码一二三四区免费| 日韩精品成人一区二区三区| 黄色免费观看视频网站| 国产欧美一区二区色老头| av女优在线播放| 国产在线欧美| 日本福利视频一区| 一本久道久久综合狠狠爱| 国产精品久久..4399| 影音先锋亚洲一区| 亚洲不卡中文字幕无码| 亚洲一区网站| 日韩无套无码精品| 蜜桃视频一区二区| www午夜视频| 久久99精品久久久| 亚洲成人手机在线观看| 国产精品1024久久| 国模无码视频一区| 91美女在线观看| av电影在线不卡| 中文字幕在线观看一区二区| 久久国产波多野结衣| 亚洲精品少妇30p| 国产在线视频二区| 欧美日韩亚洲国产一区| www.五月婷婷.com| 欧美精品成人一区二区三区四区| 国产强被迫伦姧在线观看无码| 日韩精品一区二区在线观看| 色窝窝无码一区二区三区| 亚洲毛片在线观看| av中文天堂在线| 美女精品视频一区| 绿色成人影院| 国产精品欧美亚洲777777| 国产亚洲精aa在线看| 国产另类自拍| 精品久久久久久久久久久下田 | 婷婷亚洲一区二区三区| 亚洲亚裔videos黑人hd| 成人免费观看视频大全| 98精品在线视频| 国产成人午夜性a一级毛片| 亚洲最大的免费| 日韩成人午夜| 亚洲最新免费视频| 精品动漫一区| 日日躁夜夜躁aaaabbbb| 高清不卡一区二区在线| 一级黄色录像毛片| 亚洲国产wwwccc36天堂| 精人妻无码一区二区三区| 91精品国产一区二区| 欧洲亚洲精品视频| 久久夜精品香蕉| 桃色一区二区| 国产精品日韩欧美一区二区| 精品久久久亚洲| 黄色一级视频在线播放| 久久精品国产**网站演员| 国产精品第七页| 亚洲免费观看高清完整| 无码人妻丰满熟妇精品区| 精品日韩欧美在线| jizzjizz在线观看| 2019中文字幕全在线观看| 国产欧美88| 午夜精品美女久久久久av福利| 亚洲人成免费| 伊人免费视频二| 国产日韩欧美激情| 国产精品免费av一区二区| 欧美一区二区视频在线观看2022 | 日韩中文字幕组| 成人黄色777网| 一区二区视频免费看| 欧美视频一区二区三区四区| 色鬼7777久久| 97激碰免费视频| 国产精品白丝av嫩草影院| avove在线观看| 美女精品自拍一二三四| 蜜桃精品一区二区| 亚洲午夜久久久久久久久久久| 97caocao| 久久久成人精品视频| av成人免费| 欧美日韩中文国产一区发布| 1024精品一区二区三区| 好吊操视频这里只有精品| 综合久久久久久| 一级片免费网站| 正在播放欧美视频| 电影亚洲精品噜噜在线观看| 久久久久久国产精品mv| 亚洲专区免费| 网站免费在线观看| 精品久久久久久久久中文字幕| 日本黄视频在线观看| 久久人人看视频| 日韩成人午夜| 日韩av一二三四| 久久久精品欧美丰满| 69国产精品视频免费观看| 日韩电影中文字幕在线| 小h片在线观看| 欧美精品七区| 日本午夜精品视频在线观看| 超碰97av在线| 欧美男同性恋视频网站| 欧美另类极品| 亚洲永久在线观看| 国产精品magnet| 国产视频精品视频| 婷婷国产在线综合| 你懂的在线免费观看| 国产精品女人久久久久久| 国产精品精品| 国产伦理在线观看| 亚洲成人资源网| 国模吧精品人体gogo| 国产精品一区久久| 亚洲国产不卡| 国产精品果冻传媒| 日韩欧美一区二区三区久久| 国产黄在线播放| 成人黄色激情网| 狠色狠色综合久久| 国产吞精囗交久久久| 欧美性高清videossexo| 欧美日韩精品亚洲精品| 国产综合色产在线精品| 五月婷婷综合激情网| 日韩精品一区二区在线观看| 黄色视屏在线免费观看| 日韩av一级大片| 久久 天天综合| 国产在线观看免费视频今夜| 日韩h在线观看| 日本在线一区二区| 国产精品免费看久久久无码| 99久久精品免费看国产免费软件| 福利视频久久| 欧美成人一品| 亚洲av无码一区二区三区网址| 欧美在线free| 性xxxxfjsxxxxx欧美| 麻豆av一区| 国产一区二区三区四区五区美女 | 国产精品国色综合久久| 亚洲国产精品va| 久久www人成免费看片中文| 久久精品日产第一区二区三区乱码 | 国产www免费观看| 欧美最猛性xxxxx亚洲精品| 欧美肥老太太性生活| 影音先锋人妻啪啪av资源网站| 精品视频1区2区| 国产免费拔擦拔擦8x在线播放| 亚洲一区二区三区精品动漫|