|
| 1 | +--- |
| 2 | +content_type: "reference" |
| 3 | +title: 리눅스 커널 버전 요구 사항 |
| 4 | +weight: 10 |
| 5 | +--- |
| 6 | + |
| 7 | +{{% thirdparty-content %}} |
| 8 | + |
| 9 | +많은 기능이 특정 커널 기능에 의존하며 최소 커널 버전 요구 사항이 있다. |
| 10 | +그러나 특정 운영 체제 배포판에서는 커널 버전 번호에만 의존하는 것이 충분하지 |
| 11 | +않을 수 있다. |
| 12 | +RHEL, 우분투, SUSE와 같은 배포판의 메인테이너들이 선택된 기능을 이전 커널 릴리스에 |
| 13 | +백포트(이전 커널 버전을 유지하면서)하는 경우가 많기 때문이다. |
| 14 | + |
| 15 | +## 파드 sysctl |
| 16 | + |
| 17 | +리눅스에서 `sysctl()` 시스템 콜은 런타임에 커널 파라미터를 설정한다. 이러한 |
| 18 | +파라미터를 설정하는 데 사용할 수 있는 `sysctl`이라는 커맨드라인 툴이 있으며, 많은 파라미터가 |
| 19 | +`proc` 파일시스템을 통해 노출된다. |
| 20 | + |
| 21 | +일부 sysctl은 충분히 최신 커널이 있는 경우에만 사용할 수 있다. |
| 22 | + |
| 23 | +다음 sysctl은 최소 커널 버전 요구 사항이 있으며, |
| 24 | +[안전한 집합(safe set)](/docs/tasks/administer-cluster/sysctl-cluster/#safe-and-unsafe-sysctls)에서 지원된다. |
| 25 | + |
| 26 | +<!-- |
| 27 | +Code: https://github.com/kubernetes/kubernetes/blob/00236ae0d73d2455a2470469ed1005674f8ed61f/pkg/util/kernel/constants.go#L19-L45 |
| 28 | +--> |
| 29 | +- `net.ipv4.ip_local_reserved_ports` (쿠버네티스 1.27부터, 커널 3.16+ 필요); |
| 30 | +- `net.ipv4.tcp_keepalive_time` (쿠버네티스 1.29부터, 커널 4.5+ 필요); |
| 31 | +- `net.ipv4.tcp_fin_timeout` (쿠버네티스 1.29부터, 커널 4.6+ 필요); |
| 32 | +- `net.ipv4.tcp_keepalive_intvl` (쿠버네티스 1.29부터, 커널 4.5+ 필요); |
| 33 | +- `net.ipv4.tcp_keepalive_probes` (쿠버네티스 1.29부터, 커널 4.5+ 필요); |
| 34 | +- `net.ipv4.tcp_syncookies` (커널 4.6+부터 네임스페이스 지원). |
| 35 | +- `net.ipv4.tcp_rmem` (쿠버네티스 1.32부터, 커널 4.15+ 필요). |
| 36 | +- `net.ipv4.tcp_wmem` (쿠버네티스 1.32부터, 커널 4.15+ 필요). |
| 37 | +- `net.ipv4.vs.conn_reuse_mode` (`ipvs` 프록시 모드에서 사용, 커널 4.1+ 필요); |
| 38 | + |
| 39 | +### kube proxy `nftables` 프록시 모드 |
| 40 | + |
| 41 | +<!-- |
| 42 | +Code: https://github.com/kubernetes/kubernetes/blob/00236ae0d73d2455a2470469ed1005674f8ed61f/pkg/util/kernel/constants.go#L53-L56 |
| 43 | +--> |
| 44 | +쿠버네티스 {{< skew currentVersion >}}에서, |
| 45 | +kube-proxy의 [`nftables` 모드](/docs/reference/networking/virtual-ips/#proxy-mode-nftables)는 |
| 46 | +nft 커맨드라인 툴의 버전 1.0.1 이상과 |
| 47 | +커널 5.13 이상이 필요하다. |
| 48 | + |
| 49 | +테스트/개발 목적으로는 kube-proxy 설정에서 |
| 50 | +`nftables.skipKernelVersionCheck` 옵션을 설정하면 5.4까지의 이전 커널을 사용할 수 있다. |
| 51 | +그러나 시스템의 다른 nftables 사용자와 문제를 일으킬 수 있으므로 |
| 52 | +프로덕션 환경에서는 권장하지 않는다. |
| 53 | + |
| 54 | +## 버전 2 컨트롤 그룹(control group) |
| 55 | + |
| 56 | +쿠버네티스 v1.31부터 cgroup v1 지원은 유지 관리 모드이며, cgroup v2 |
| 57 | +사용을 권장한다. |
| 58 | +[리눅스 5.8](https://github.com/torvalds/linux/commit/4a7e89c5ec0238017a757131eb9ab8dc111f961c)에서 편의를 위해 시스템 레벨 `cpu.stat` 파일이 루트 cgroup에 추가되었다. |
| 59 | + |
| 60 | +runc 문서에서는, freezer 부재로 인해 커널 5.2 이전 버전은 권장하지 않는다. |
| 61 | + |
| 62 | +## PSI(Pressure Stall Information) {#requirements-psi} |
| 63 | + |
| 64 | +[PSI(Pressure Stall Information)](/docs/reference/instrumentation/understand-psi-metrics/)는 리눅스 커널 버전 4.20 이상에서 지원되지만, 다음 설정이 필요하다. |
| 65 | + |
| 66 | +- 커널이 `CONFIG_PSI=y` 옵션으로 컴파일되어야 한다. 대부분의 최신 배포판은 이를 기본적으로 활성화한다. `zgrep CONFIG_PSI /proc/config.gz`를 실행하여 커널 설정을 확인할 수 있다. |
| 67 | +- 일부 리눅스 배포판은 PSI를 커널에 컴파일하지만 기본적으로 비활성화할 수 있다. 이 경우, 커널 커맨드라인에 `psi=1` 파라미터를 추가하여 부트 시 활성화해야 한다. |
| 68 | + |
| 69 | +## 기타 커널 요구 사항 {#requirements-other} |
| 70 | + |
| 71 | +일부 기능은 새로운 커널 기능에 의존할 수 있으며 특정 커널 요구 사항이 있다. |
| 72 | + |
| 73 | +<!-- |
| 74 | +Code(recursive read only mount): https://github.com/kubernetes/kubernetes/blob/00236ae0d73d2455a2470469ed1005674f8ed61f/staging/src/k8s.io/cri-api/pkg/apis/runtime/v1/api.proto#L1605-L1609 |
| 75 | +Code(user namespace and swap): https://github.com/kubernetes/kubernetes/blob/00236ae0d73d2455a2470469ed1005674f8ed61f/pkg/util/kernel/constants.go#L47-L51 |
| 76 | +--> |
| 77 | +1. [재귀적 읽기 전용 마운트](/docs/concepts/storage/volumes/#recursive-read-only-mounts): |
| 78 | + 리눅스 커널 v5.12에 추가된 `mount_setattr`(2)를 사용하여 |
| 79 | + `AT_RECURSIVE` 플래그와 함께 `MOUNT_ATTR_RDONLY` 속성을 적용하여 구현된다. |
| 80 | +2. 파드 사용자 네임스페이스 지원은 |
| 81 | + [KEP-127](https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/127-user-namespaces/README.md)에 따라 최소 커널 버전 6.5+가 필요하다. |
| 82 | +3. [노드 시스템 스왑(swap)](/docs/concepts/architecture/nodes/#swap-memory)의 경우, `noswap`으로 설정된 tmpfs는 |
| 83 | + 커널 6.3까지 지원되지 않는다. |
| 84 | + |
| 85 | +## 리눅스 커널 장기 유지 관리 |
| 86 | + |
| 87 | +활성 커널 릴리스는 [kernel.org](https://www.kernel.org/category/releases.html)에서 확인할 수 있다. |
| 88 | + |
| 89 | +이전 커널 트리에 대한 버그 수정을 백포트하기 위해 보통 여러 _장기 유지 관리(long term maintenance)_ 커널 릴리스가 |
| 90 | +제공된다. 이러한 커널에는 중요한 버그 수정만 적용되며, 특히 오래된 |
| 91 | +트리의 경우 매우 빈번하게 릴리스되지 않는다. |
| 92 | +리눅스 커널 웹사이트의 _Longterm_ 카테고리에서 |
| 93 | +[릴리스 목록](https://www.kernel.org/category/releases.html)을 참고한다. |
| 94 | + |
| 95 | +## {{% heading "whatsnext" %}} |
| 96 | + |
| 97 | +- 자세한 내용은 [sysctl](/docs/tasks/administer-cluster/sysctl-cluster/)을 참고한다. |
| 98 | +- kube-proxy를 [nftables 모드](/docs/reference/networking/virtual-ips/#proxy-mode-nftables)로 실행할 수 있다. |
| 99 | +- [cgroup v2](/docs/concepts/architecture/cgroups/)에서 더 많은 정보를 확인한다. |
0 commit comments