当前位置:首页 > Web开发 > 正文

kubernetes集群中的pause容器

2024-03-31 Web开发

昨天晚上搭建好了k8s多主集群,启动了一个nginx的pod,然而每启动一个pod就陪同这一个pause容器,考虑到之前在做kubelet的systemd unit文件时有见到:

1

2

3

4

5

6

 

[[email protected] ~]

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

43884d79fe6f nginx "nginx -g 'daemon of…" 11 hours ago Up 11 hours k8s_nginx-pod_nginx-con-594b8d6b48-46gf7_default_25b0048f-a24f-11e9-8149-00163e0134cf_0

eff67394c9c8 nginx "nginx -g 'daemon of…" 11 hours ago Up 11 hours k8s_nginx-pod_nginx-con-594b8d6b48-vt589_default_25aefc99-a24f-11e9-8149-00163e0134cf_1

261226f6b92a registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 "/pause" 11 hours ago Up 11 hours k8s_POD_nginx-con-594b8d6b48-vt589_default_25aefc99-a24f-11e9-8149-00163e0134cf_1

fc94013b93dd registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1 "/pause" 11 hours ago Up 11 hours k8s_POD_nginx-con-594b8d6b48-46gf7_default_25b0048f-a24f-11e9-8149-00163e0134cf_1

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

 

### 6 创建和分发kubelet systemd unit文件

```bash

cat >/etc/systemd/system/kubelet.service <<EOF

[Unit]

Description=Kubernetes Kubelet

Documentation=https://github.com/GoogleCloudPlatform/kubernetes

After=docker.service

Requires=docker.service

[Service]

WorkingDirectory=http://www.mamicode.com/var/lib/kubelet

ExecStart=http://www.mamicode.com/usr/local/bin/kubelet

--bootstrap-kubeconfig=http://www.mamicode.com/etc/kubernetes/cert/kubelet-bootstrap.kubeconfig

--cert-dir=http://www.mamicode.com/etc/kubernetes/cert

--kubeconfig=http://www.mamicode.com/etc/kubernetes/cert/kubelet.kubeconfig

--config=http://www.mamicode.com/etc/kubernetes/cert/kubelet.config.json

--hostname-override=172.24.150.89

--pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause-amd64:3.1

--allow-privileged=true

--alsologtostderr=true

--logtostderr=false

--log-dir=http://www.mamicode.com/var/log/kubernetes

--v=2

Restart=on-failure

RestartSec=5

[Install]

WantedBy=multi-user.target

EOF

 

首先找一下源码看一下:
pause源码C语言编写的主要有四个文件:
orphan.c文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

 

#include <stdio.h>

#include <unistd.h>

int () {

pid_t pid;

pid = fork();

if (pid == 0) {

while (getppid() > 1)

;

printf("Child exiting: pid=%d ppid=%dn", getpid(), getppid());

return 0;

} else if (pid > 0) {

printf("Parent exiting: pid=%d ppid=%dn", getpid(), getppid());

return 0;

}

perror("Could not create child");

return 1;

}

 

pause.c文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

 

#include <signal.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/types.h>

#include <sys/wait.h>

#include <unistd.h>

#define STRINGIFY(x) #x

#define VERSION_STRING(x) STRINGIFY(x)

#ifndef VERSION

#define VERSION HEAD

#endif

static void sigdown(int signo) {

psignal(signo, "Shutting down, got signal");

exit(0);

}

static void sigreap(int signo) {

while (waitpid(-1, NULL, WNOHANG) > 0)

;

}

int main(int argc, char **argv) {

int i;

for (i = 1; i < argc; ++i) {

if (!strcasecmp(argv[i], "-v")) {

printf("pause.c %sn", VERSION_STRING(VERSION));

return 0;

}

}

if (getpid() != 1)

/* Not an error because pause sees use outside of infra containers. */

fprintf(stderr, "Warning: pause should be the first processn");

if (sigaction(SIGINT, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)

return 1;

if (sigaction(SIGTERM, &(struct sigaction){.sa_handler = sigdown}, NULL) < 0)

return 2;

if (sigaction(SIGCHLD, &(struct sigaction){.sa_handler = sigreap,

.sa_flags = SA_NOCLDSTOP},

NULL) < 0)

return 3;

for (;;)

pause();

fprintf(stderr, "Error: infinite loop terminatedn");

return 42;

}

 

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/32326.html