# Cài đặt kubeadm

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

<img src="/images/kubeadm-stacked-color.png" align="right" width="150px"></img>
Trang này hướng dẫn cách cài đặt hộp công cụ `kubeadm`.
Để biết thông tin về cách tạo một cụm với Kubeadm sau khi bạn đã thực hiện quy trình cài đặt này,
xem trang [Tạo một cụm với kubeadm](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/).







<div class="version-list">
    <p>
        Trang installation guide này dành cho Kubernetes v1.36. Nếu bạn muốn sử dụng phiên bản Kubernetes khác, vui lòng tham khảo các trang sau đây thay vì:
    </p>
    <ul>
        
            
        
            
            <li>
                <a href="https://v1-35.docs.kubernetes.io/vi/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">Cài đặt kubeadm (Kubernetes v1.35)</a>
            </li>
            
        
            
            <li>
                <a href="https://v1-34.docs.kubernetes.io/vi/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">Cài đặt kubeadm (Kubernetes v1.34)</a>
            </li>
            
        
            
            <li>
                <a href="https://v1-33.docs.kubernetes.io/vi/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">Cài đặt kubeadm (Kubernetes v1.33)</a>
            </li>
            
        
            
            <li>
                <a href="https://v1-32.docs.kubernetes.io/vi/docs/setup/production-environment/tools/kubeadm/install-kubeadm/">Cài đặt kubeadm (Kubernetes v1.32)</a>
            </li>
            
        
    </ul>
</div>


## Trước khi bạn bắt đầu {#before-you-begin}

* Một máy chủ Linux tương thích. Dự án Kubernetes cung cấp những hướng dẫn chung cho các bản phân phối Linux
  dựa trên Debian và Red Hat, và những bản phân phối không có trình quản lý gói.
* 2 GB RAM hoặc nhiều hơn cho mỗi máy (nếu ít hơn sẽ không đủ tài nguyên cho các ứng dụng của bạn).
* 2 CPU hoặc nhiều hơn cho các máy control plane.
* Kết nối toàn mạng giữa tất cả các máy trong cụm (mạng public hoặc private đều được).
* Mọi máy phải có hostname, địa chỉ MAC, và product_uuid duy nhất. Xem [tại đây](#verify-mac-address) để biết thêm chi tiết.
* Một số cổng được mở trên máy của bạn. Xem [tại đây](#check-required-ports) để biết thêm chi tiết.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Việc cài đặt <code>kubeadm</code> có thể được thực hiện thông qua các tệp nhị phân sử dụng liên kết động và giả sử hệ thống của bạn cung cấp <code>glibc</code>.
Giả định này hợp lý trên nhiều bản phân phối Linux (bao gồm Debian, Ubuntu, Fedora, CentOS, v.v...)
nhưng không phải luôn đúng đối với các bản phân phối nhẹ và tùy biến bởi mặc định chúng không có sẵn <code>glibc</code>, ví dụ Alpine Linux.
Kỳ vọng là bản phân phối hoặc bao gồm <code>glibc</code> hoặc có một
<a href="https://wiki.alpinelinux.org/wiki/Running_glibc_programs">lớp tương thích</a>
cung cấp các đặc trưng mong muốn.</div>


<!-- steps -->

## Kiểm tra phiên bản OS

<div class="alert alert-secondary callout third-party-content" role="note"><strong>Lưu ý:</strong>&puncsp;Phần này liên kết đến các dự án bên thứ ba cung cấp chức năng được yêu cầu bởi Kubernetes. Tác giả dự án Kubernetes không chịu trách nhiệm về những dự án này, được liệt kê theo thứ tự chữ cái. Để thêm một dự án vào danh sách này, đọc <a href="/docs/contribute/style/content-guide/#third-party-content">hướng dẫn nội dung</a> trước khi gửi thay đổi. <a href="#third-party-content-disclaimer">Thêm thông tin.</a></div>


<ul class="nav nav-tabs" id="tabs-operating-system-version-check" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-operating-system-version-check-0" role="tab" aria-controls="tabs-operating-system-version-check-0" aria-selected="true">Linux</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-operating-system-version-check-1" role="tab" aria-controls="tabs-operating-system-version-check-1">Windows</a></li></ul>

<div class="tab-content" id="tabs-operating-system-version-check-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-operating-system-version-check-0" role="tabpanel" aria-labelledby="tabs-operating-system-version-check-0-tab" tabindex="operating-system-version-check"><ul>
<li>Dự án kubeadm hỗ trợ LTS kernel. Xem <a href="https://www.kernel.org/category/releases.html">Danh sách LTS kernel</a>.</li>
<li>Bạn có thể biết được phiên bản kernel bằng câu lệnh <code>uname -r</code></li>
</ul>
<p>Để biết thêm thông tin, xem <a href="/docs/reference/node/kernel-version-requirements/">Các yêu cầu về Linux Kernel</a>.</p>
</div><div class="tab-body tab-pane fade"
        id="tabs-operating-system-version-check-1" role="tabpanel" aria-labelledby="tabs-operating-system-version-check-1-tab" tabindex="operating-system-version-check"><ul>
<li>Dự án kubeadm hỗ trợ các phiên bản kernel hiện tại. Xem danh sách kernel hiện tại <a href="https://learn.microsoft.com/en-us/windows/release-health/windows-server-release-info">Thông tin phát hành Windows Server</a>.</li>
<li>Bạn có thể biết được phiên bản kernel (hay gọi là phiên bản OS) bằng câu lệnh <code>systeminfo</code></li>
</ul>
<p>Để biết thêm thông tin, xem <a href="/docs/concepts/windows/intro/#windows-os-version-support">Sự tương thích của các phiên bản Windows OS</a>.</p>
</div></div>


Một cụm Kubernetes được tạo bởi kubeadm phụ thuộc vào phần mềm mà chúng sử dụng các chức năng kernel.
Phần mềm này bao gồm, nhưng không giới hạn ở
<a class='glossary-tooltip' title='Container runtime là một phần mềm có nhiệm vụ khởi chạy các container.' data-bs-toggle='tooltip' data-bs-placement='top' href='/vi/docs/setup/production-environment/container-runtimes' target='_blank' aria-label='container runtime'>container runtime</a>,
<a class='glossary-tooltip' title='Một agent chạy trên mỗi node nằm trong cluster. Nó giúp đảm bảo rằng các containers đã chạy trong một pod.' data-bs-toggle='tooltip' data-bs-placement='top' href='/vi/docs/reference/generated/kubelet' target='_blank' aria-label='kubelet'>kubelet</a>, và một plugin <a class='glossary-tooltip' title='Container network interface (CNI) plugin là một loại Network plugin mà tuân thủ đặc điểm kỹ thuật của appc/CNI.' data-bs-toggle='tooltip' data-bs-placement='top' href='/vi/docs/concepts/extend-kubernetes/compute-storage-net/network-plugins/' target='_blank' aria-label='Container Network Interface'>Container Network Interface</a>.

Để giúp bạn tránh những lỗi không mong muốn khi sử dụng một phiên bản kernel không được hỗ trợ, kubeadm chạy kiểm tra pre-flight
`SystemVerification`. Quá trình kiểm tra này sẽ lỗi nếu phiên bản kernel không được hỗ trợ.

Bạn có thể chọn bỏ qua kiểm tra, nếu bạn biết rằng kernel của bạn
cung cấp các chức năng cần thiết, kể cả kubeadm không hỗ trợ phiên bản đó.

## Xác nhận địa chỉ MAC và product_uuid là duy nhất cho từng node {#verify-mac-address}

* Bạn có thể biết được địa chỉ MAC của network interfaces bằng câu lệnh `ip link` hoặc `ifconfig -a`
* product_uuid có thể kiểm tra bằng câu lệnh `sudo cat /sys/class/dmi/id/product_uuid`

Rất có thể các thiết bị phần cứng sẽ có các địa chỉ duy nhất, mặc dù một vài máy ảo có thể có
các giá trị giống hệt nhau. Kubernetes sử dụng những giá trị đó để định danh duy nhất cho các node trong cụm.
Nếu các giá trị đó không là duy nhất cho từng node, quá trình cái đặt
có thể [thất bại](https://github.com/kubernetes/kubeadm/issues/31).

## Kiểm tra network adapter

Nếu bạn có nhiều hơn một network adapter, và các thành phần Kubernetes của bạn không thể truy cập trên route
mặc định, chúng tôi khuyên bạn nên bổ sung (các) IP route để các địa chỉ cụm Kubernetes đi qua adpater thích hợp.

## Kiểm tra các cổng cần thiết {#check-required-ports}

Những [cổng cần thiết](/docs/reference/networking/ports-and-protocols/)
cần phải được mở để các thành phần Kubernetes giao tiếp với nhau.
Bạn có thể sử dụng công cụ như [netcat](https://netcat.sourceforge.net) để kiểm tra cổng có được mở hay không. Ví dụ:

```shell
nc 127.0.0.1 6443 -zv -w 2
```

Pod network plugin mà bạn sử dụng cũng có thể yêu cầu mở một số cổng nhất định.
Vì điều này khác nhau đối với từng pod network plugin, vui lòng xem
tài liệu của các plugin về (các) cổng cần thiết.

## Cấu hình swap {#swap-configuration}

Mặc định kubelet sẽ không thể khởi động nếu bộ nhớ swap được phát hiện trên một node.
Điều này có nghĩa rằng swap nên hoặc là tắt đi hoặc là được chấp nhận bởi kubelet.

* Để chấp nhận swap, thêm `failSwapOn: false` vào cấu hình kubelet hoặc thông qua tham số dòng lệnh.
  Lưu ý: thậm chí nếu `failSwapOn: false` được thêm, workload mặc định cũng không có quyền truy cập swap.
  Điều này có thể được thay đổi bằng cách đặt `swapBehavior`, một lần nữa trong file cấu hình kubelet. Để sử dụng swap,
  đặt một `swapBehavior` khác với giá trị mặc định `NoSwap`.
  Xem [Quản lý bộ nhớ swap](/docs/concepts/architecture/nodes/#swap-memory) để biết thêm chi tiết.
* Để tắt swap, `sudo swapoff -a` có thể được sử dụng để tắt tạm thời.
  Để làm cho thay đổi này duy trì mỗi khi tái khởi động, đảm bảo rằng swap được tắt trong
  các file cấu hình như `/etc/fstab`, `systemd.swap`, phụ thuộc vào việc nó được cấu hình như thế nào trên hệ thống của bạn.


## Cài đặt một container runtime {#installing-runtime}

Để chạy các container trong các Pod, Kubernetes sử dụng một
<a class='glossary-tooltip' title='Container runtime là một phần mềm có nhiệm vụ khởi chạy các container.' data-bs-toggle='tooltip' data-bs-placement='top' href='/vi/docs/setup/production-environment/container-runtimes' target='_blank' aria-label='container runtime'>container runtime</a>.

Mặc định, Kubernetes sử dụng
<a class='glossary-tooltip' title='Một API phục vụ cho việc tích hợp container runtimes với kubelet.' data-bs-toggle='tooltip' data-bs-placement='top' href='/vi/docs/concepts/overview/components/#container-runtime' target='_blank' aria-label='Container Runtime Interface'>Container Runtime Interface</a> (CRI)
để giao tiếp với container runtime mà bạn chọn.

Nếu bạn không chỉ định một runtime, kubeadm tự động phát hiện một container runtime
đã cài đặt bằng cách quét qua một danh sách những endpoint đã biết.

Nếu có nhiều hoặc không có container runtime nào được phát hiện, kubeadm sẽ ném ra một lỗi
và sẽ yêu cầu bạn chỉ định một thứ bạn muốn sử dụng.

Xem [container runtimes](/docs/setup/production-environment/container-runtimes/)
để biết thêm thông tin.


<div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Docker Engine không triển khai <a href="/docs/concepts/architecture/cri/">CRI</a>,
một thứ bắt buộc của container runtime để hoạt động với Kubernetes.
Vì lí do đó, một dịch vụ bổ sung <a href="https://mirantis.github.io/cri-dockerd/">cri-dockerd</a>
phải được cài đặt. cri-dockerd là một dự án dựa trên sự hỗ trợ legacy built-in của
Docker Engine mà đã bị <a href="/dockershim">loại bỏ</a> khỏi kubelet trong phiên bản 1.24.</div>


Những bản bên dưới bao gồm những endpoint đã biết của những hệ điều hành được hỗ trợ:

<ul class="nav nav-tabs" id="tabs-container-runtime" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-container-runtime-0" role="tab" aria-controls="tabs-container-runtime-0" aria-selected="true">Linux</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-container-runtime-1" role="tab" aria-controls="tabs-container-runtime-1">Windows</a></li></ul>

<div class="tab-content" id="tabs-container-runtime-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-container-runtime-0" role="tabpanel" aria-labelledby="tabs-container-runtime-0-tab" tabindex="container-runtime"><table><caption style="display: none;">Linux container runtimes</caption>
	<thead>
			<tr>
					<th>Runtime</th>
					<th>Đường dẫn tới Unix domain socket</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>containerd</td>
					<td><code>unix:///var/run/containerd/containerd.sock</code></td>
			</tr>
			<tr>
					<td>CRI-O</td>
					<td><code>unix:///var/run/crio/crio.sock</code></td>
			</tr>
			<tr>
					<td>Docker Engine (using cri-dockerd)</td>
					<td><code>unix:///var/run/cri-dockerd.sock</code></td>
			</tr>
	</tbody>
</table>
</div><div class="tab-body tab-pane fade"
        id="tabs-container-runtime-1" role="tabpanel" aria-labelledby="tabs-container-runtime-1-tab" tabindex="container-runtime"><table><caption style="display: none;">Windows container runtimes</caption>
	<thead>
			<tr>
					<th>Runtime</th>
					<th>Đường dẫn tới Windows named pipe</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>containerd</td>
					<td><code>npipe:////./pipe/containerd-containerd</code></td>
			</tr>
			<tr>
					<td>Docker Engine (using cri-dockerd)</td>
					<td><code>npipe:////./pipe/cri-dockerd</code></td>
			</tr>
	</tbody>
</table>
</div></div>


## Cài đặt kubeadm, kubelet và kubectl

Bạn sẽ cài đặt các package này trên toàn bộ máy chủ của bạn:

* `kubeadm`: lệnh khởi tạo cụm.

* `kubelet`: thành phần chạy trên toàn bộ các máy trong cụm của bạn
  và làm những việc như khởi chạy pod và container.

* `kubectl`: tiện ích dòng lệnh để giao tiếp với cụm.

kubeadm **sẽ không** cài đặt hoặc quản lý `kubelet` và `kubectl` cho bạn, vì vậy bạn sẽ
cần phải đảm bảo rằng phiên bản của chúng giống với Kubernetes control plane bạn muốn
kubeadm cài cho bạn. Nếu bạn không làm vậu, rủi ro về sự chênh lệch phiên bản có thể xảy ra và
dẫn tới những hành vi lỗi, không mong muốn. Tuy nhiên, chênh lệch _một_ phiên bản minor giữa
kubelet và control plane được chấp nhận, nhưng phiên bản kubelet không bao giờ vượt quá phiên bản API
server. Ví dụ, kubelet đang chạy 1.7.0 có thể tương thích hoàn toàn với API server phiên bản 1.8.0,
nhưng không có chiều ngược lại.

Để biết cách cài đặt `kubectl`, xem [Cài đặt và thiết lập kubectl](/docs/tasks/tools/).

<div class="alert alert-danger" role="note"><h4 class="alert-heading">Cảnh báo:</h4>Những hướng dẫn này loại trừ tất cả các package của Kubernetes khỏi mọi sự nâng cấp hệ thống.
Bởi vì kubeadm và Kubernetes yêu cầu
<a href="/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/">đặc biệt chú ý khi nâng cấp</a>.</div>


Để biết thêm thông tin về chênh lệch phiên bản, xem:

* [Chính sách về phiên bản và chênh lệch phiên bản](/docs/setup/release/version-skew-policy/) của Kubernetes
* [Chính sách sai lệch phiên bản](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#version-skew-policy) cụ thể cho kubeadm

<div class="alert alert-secondary callout note" role="note">
  <strong>Lưu ý:</strong> Các kho lưu trữ gói cũ (<code>apt.kubernetes.io</code> và <code>yum.kubernetes.io</code>) đã bị
<a href="/blog/2023/08/31/legacy-package-repository-deprecation/">lỗi thời và đóng băng từ ngày 13 tháng 9, 2023</a>.
<strong>Sử dụng <a href="/blog/2023/08/15/pkgs-k8s-io-introduction/">các kho lưu trữ mới được đặt tại <code>pkgs.k8s.io</code></a>
được khuyến nghị mạnh mẽ và yêu cầu để cài đặt các phiên bản Kubernetes phát hành sau ngày 13 tháng 9, 2023.</strong>
Các kho cũ đã lỗi thời, và nội dung của chúng, có thể bị xóa bất kỳ lúc nào trong tương lai và mà không có
thêm thông báo. Các kho lưu trữ mới cung cấp tải về cho các phiên bản Kubernetes bắt đầu từ v1.24.0.
</div>



<div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Có một kho lưu trữ package chuyên dụng cho từng phiên bản minor của Kubernetes. Nếu bạn muốn cài đặt
một phiên bản minor khác v1.36, vui lòng xem hướng dẫn cài đặt cho
phiên bản minior bạn mong muốn.</div>


<ul class="nav nav-tabs" id="tabs-k8s-install" role="tablist"><li class="nav-item"><a data-bs-toggle="tab" class="nav-link active" href="#tabs-k8s-install-0" role="tab" aria-controls="tabs-k8s-install-0" aria-selected="true">Các bản phân phối dựa trên Debian</a></li>
	  
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-k8s-install-1" role="tab" aria-controls="tabs-k8s-install-1">Các bản phân phối dựa trên Red Hat</a></li>
		<li class="nav-item"><a data-bs-toggle="tab" class="nav-link" href="#tabs-k8s-install-2" role="tab" aria-controls="tabs-k8s-install-2">Không dùng trình quản lý package</a></li></ul>

<div class="tab-content" id="tabs-k8s-install-content"><div class="tab-body tab-pane fadeshow active"
        id="tabs-k8s-install-0" role="tabpanel" aria-labelledby="tabs-k8s-install-0-tab" tabindex="k8s-install"><p>Hướng dẫn này dành cho Kubernetes v1.36.</p>
<ol>
<li>
<p>Cập nhật <code>apt</code> package index và cài đặt các package cần thiết để sử dụng kho lưu trữ <code>apt</code> của Kubernetes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo apt-get update
</span></span><span class="line"><span class="cl"><span class="c1"># apt-transport-https có thể là một package giả; nếu vậy, bạn có thể bỏ qua package này</span>
</span></span><span class="line"><span class="cl">sudo apt-get install -y apt-transport-https ca-certificates curl gpg
</span></span></code></pre></div></li>
<li>
<p>Tải xuống khóa ký công khai cho các kho lưu trữ package của Kubernetes.
Toàn bộ các kho lưu trữ sử dụng chung khóa ký do vậy bạn có thể không cần quan tâm tới phiên bản trong URL:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Nếu thư mục `/etc/apt/keyrings` không tồn tại, nó nên được tạo trước lệnh curl, đọc chú thích bên dưới.</span>
</span></span><span class="line"><span class="cl"><span class="c1"># sudo mkdir -p -m 755 /etc/apt/keyrings</span>
</span></span><span class="line"><span class="cl">curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.36/deb/Release.key <span class="p">|</span> sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
</span></span></code></pre></div></li>
</ol>
<div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Trong những bản phát hành cũ hơn Debian 12 và Ubuntu 22.04, thư mục <code>/etc/apt/keyrings</code> mặc định không
tồn tại, và nó nên được tạo trước lệnh curl.</div>
<ol start="3">
<li>
<p>Thêm kho lưu trữ <code>apt</code> Kubernetes thích hợp. Vui lòng chú ý rằng kho lưu trữ này chỉ chứa những package
cho Kubernetes 1.36; đối với các phiên bản Kubernetes minor khác, bạn cần phải
thay đổi phiên bản Kubernetes minor trong URL để trùng với phiên bản minor bạn mong muốn
(bạn cũng nên kiểm tra lại rằng bạn đang đọc tài liệu cho phiên bản Kubernetes
mà bạn dự định cài đặt).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Điều này sẽ ghi đè bất kỳ những cấu hình nào đang có trong /etc/apt/sources.list.d/kubernetes.list</span>
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s1">&#39;deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.36/deb/ /&#39;</span> <span class="p">|</span> sudo tee /etc/apt/sources.list.d/kubernetes.list
</span></span></code></pre></div></li>
<li>
<p>Cập nhật <code>apt</code> package index, cài đặt kubelet, kubeadm và kubectl, và ghim lại phiên bản của chúng:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo apt-get update
</span></span><span class="line"><span class="cl">sudo apt-get install -y kubelet kubeadm kubectl
</span></span><span class="line"><span class="cl">sudo apt-mark hold kubelet kubeadm kubectl
</span></span></code></pre></div></li>
<li>
<p>(Tùy chọn) Bật dịch vụ kubelet trước khi chạy kubeadm:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> --now kubelet
</span></span></code></pre></div></li>
</ol>
</div><div class="tab-body tab-pane fade"
        id="tabs-k8s-install-1" role="tabpanel" aria-labelledby="tabs-k8s-install-1-tab" tabindex="k8s-install"><ol>
<li>
<p>Đặt SELinux thành chế độ <code>permissive</code>:</p>
<p>Những hướng dẫn này dành cho Kubernetes 1.36.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Đặt SELinux trong chế độ permissive (vô hiệu hóa nó một cách hiệu quả)</span>
</span></span><span class="line"><span class="cl">sudo setenforce <span class="m">0</span>
</span></span><span class="line"><span class="cl">sudo sed -i <span class="s1">&#39;s/^SELINUX=enforcing$/SELINUX=permissive/&#39;</span> /etc/selinux/config
</span></span></code></pre></div></li>
</ol>
<div class="alert alert-caution" role="note"><h4 class="alert-heading">Chú ý:</h4><ul>
<li>Đặt SELinux trong chế độ permissive bằng cách chạy <code>setenforce 0</code> và <code>sed ...</code>
vô hiệu hóa nó một cách hiệu quả. Điều này là bắt buộc để cho phép các container truy cập vào hệ thống file
của máy chủ; ví dụ, một vài network plugin của cụm yêu cầu điều này. Bạn phải
làm điều này cho đến khi sự hỗ trợ SELinux được cải thiện trong kubelet.</li>
<li>Bạn có thể để SELinux bật nếu bạn biết cách cấu hình nó nhưng điều đó có thể yêu cầu
các thiết lập không được hỗ trợ bởi kubeadm.</li>
</ul>
</div>
<ol start="2">
<li>
<p>Thêm kho lưu trữ <code>yum</code> của Kubernetes. Tham số <code>exclude</code> trong
định nghĩa kho lưu trữ đảm bảo rằng các package liên quan tới Kubernetes
không được nâng cấp bởi việc chạy <code>yum update</code> vì có một quy trình đặc biệt cần
tuân theo để nâng cấp Kubernetes. Vui lòng chú ý rằng kho lưu trữ này
chỉ có các package cho Kubernetes 1.36; đối với
những phiên bản Kubernetes minor khác, bạn cần phải
thay đổi phiên bản Kubernetes minor trong URL để trùng với phiên bản minor bạn mong muốn
(bạn cũng nên kiểm tra lại rằng bạn đang đọc tài liệu cho phiên bản Kubernetes
mà bạn dự định cài đặt).</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Điều này sẽ ghi đè bất kỳ những cấu hình nào đang có trong /etc/yum.repos.d/kubernetes.repo</span>
</span></span><span class="line"><span class="cl">cat <span class="s">&lt;&lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
</span></span></span><span class="line"><span class="cl"><span class="s">[kubernetes]
</span></span></span><span class="line"><span class="cl"><span class="s">name=Kubernetes
</span></span></span><span class="line"><span class="cl"><span class="s">baseurl=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/
</span></span></span><span class="line"><span class="cl"><span class="s">enabled=1
</span></span></span><span class="line"><span class="cl"><span class="s">gpgcheck=1
</span></span></span><span class="line"><span class="cl"><span class="s">gpgkey=https://pkgs.k8s.io/core:/stable:/v1.36/rpm/repodata/repomd.xml.key
</span></span></span><span class="line"><span class="cl"><span class="s">exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
</span></span></span><span class="line"><span class="cl"><span class="s">EOF</span>
</span></span></code></pre></div></li>
<li>
<p>Cài đặt kubelet, kubeadm và kubectl:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo yum install -y kubelet kubeadm kubectl --disableexcludes<span class="o">=</span>kubernetes
</span></span></code></pre></div></li>
<li>
<p>(Tùy chọn) Bật dịch vụ kubelet trước khi chạy kubeadm:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> --now kubelet
</span></span></code></pre></div></li>
</ol>
</div><div class="tab-body tab-pane fade"
        id="tabs-k8s-install-2" role="tabpanel" aria-labelledby="tabs-k8s-install-2-tab" tabindex="k8s-install"><p>Cài đặt CNI plugin (yêu cầu đối với hầu hết pod network):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">CNI_PLUGINS_VERSION</span><span class="o">=</span><span class="s2">&#34;v1.3.0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">ARCH</span><span class="o">=</span><span class="s2">&#34;amd64&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">DEST</span><span class="o">=</span><span class="s2">&#34;/opt/cni/bin&#34;</span>
</span></span><span class="line"><span class="cl">sudo mkdir -p <span class="s2">&#34;</span><span class="nv">$DEST</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl">curl -L <span class="s2">&#34;https://github.com/containernetworking/plugins/releases/download/</span><span class="si">${</span><span class="nv">CNI_PLUGINS_VERSION</span><span class="si">}</span><span class="s2">/cni-plugins-linux-</span><span class="si">${</span><span class="nv">ARCH</span><span class="si">}</span><span class="s2">-</span><span class="si">${</span><span class="nv">CNI_PLUGINS_VERSION</span><span class="si">}</span><span class="s2">.tgz&#34;</span> <span class="p">|</span> sudo tar -C <span class="s2">&#34;</span><span class="nv">$DEST</span><span class="s2">&#34;</span> -xz
</span></span></code></pre></div><p>Tạo thư mục để tải xuống file lệnh:</p>
<div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Biến <code>DOWNLOAD_DIR</code> phải được đặt tới một thư mục có thể ghi.
Nếu bạn đang chạy Flatcar Container Linux, đặt <code>DOWNLOAD_DIR=&quot;/opt/bin&quot;</code>.</div>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">DOWNLOAD_DIR</span><span class="o">=</span><span class="s2">&#34;/usr/local/bin&#34;</span>
</span></span><span class="line"><span class="cl">sudo mkdir -p <span class="s2">&#34;</span><span class="nv">$DOWNLOAD_DIR</span><span class="s2">&#34;</span>
</span></span></code></pre></div><p>Tùy chọn cài đặt crictl (yêu cầu khi tương tác với Container Runtime Interface (CRI), không bắt buộc cho kubeadm):</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">CRICTL_VERSION</span><span class="o">=</span><span class="s2">&#34;v1.31.0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">ARCH</span><span class="o">=</span><span class="s2">&#34;amd64&#34;</span>
</span></span><span class="line"><span class="cl">curl -L <span class="s2">&#34;https://github.com/kubernetes-sigs/cri-tools/releases/download/</span><span class="si">${</span><span class="nv">CRICTL_VERSION</span><span class="si">}</span><span class="s2">/crictl-</span><span class="si">${</span><span class="nv">CRICTL_VERSION</span><span class="si">}</span><span class="s2">-linux-</span><span class="si">${</span><span class="nv">ARCH</span><span class="si">}</span><span class="s2">.tar.gz&#34;</span> <span class="p">|</span> sudo tar -C <span class="nv">$DOWNLOAD_DIR</span> -xz
</span></span></code></pre></div><p>Cài đặt <code>kubeadm</code>, <code>kubelet</code> và thêm systemd service cho <code>kubelet</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">RELEASE</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>curl -sSL https://dl.k8s.io/release/stable.txt<span class="k">)</span><span class="s2">&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nv">ARCH</span><span class="o">=</span><span class="s2">&#34;amd64&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nb">cd</span> <span class="nv">$DOWNLOAD_DIR</span>
</span></span><span class="line"><span class="cl">sudo curl -L --remote-name-all https://dl.k8s.io/release/<span class="si">${</span><span class="nv">RELEASE</span><span class="si">}</span>/bin/linux/<span class="si">${</span><span class="nv">ARCH</span><span class="si">}</span>/<span class="o">{</span>kubeadm,kubelet<span class="o">}</span>
</span></span><span class="line"><span class="cl">sudo chmod +x <span class="o">{</span>kubeadm,kubelet<span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">RELEASE_VERSION</span><span class="o">=</span><span class="s2">&#34;v0.16.2&#34;</span>
</span></span><span class="line"><span class="cl">curl -sSL <span class="s2">&#34;https://raw.githubusercontent.com/kubernetes/release/</span><span class="si">${</span><span class="nv">RELEASE_VERSION</span><span class="si">}</span><span class="s2">/cmd/krel/templates/latest/kubelet/kubelet.service&#34;</span> <span class="p">|</span> sed <span class="s2">&#34;s:/usr/bin:</span><span class="si">${</span><span class="nv">DOWNLOAD_DIR</span><span class="si">}</span><span class="s2">:g&#34;</span> <span class="p">|</span> sudo tee /usr/lib/systemd/system/kubelet.service
</span></span><span class="line"><span class="cl">sudo mkdir -p /usr/lib/systemd/system/kubelet.service.d
</span></span><span class="line"><span class="cl">curl -sSL <span class="s2">&#34;https://raw.githubusercontent.com/kubernetes/release/</span><span class="si">${</span><span class="nv">RELEASE_VERSION</span><span class="si">}</span><span class="s2">/cmd/krel/templates/latest/kubeadm/10-kubeadm.conf&#34;</span> <span class="p">|</span> sed <span class="s2">&#34;s:/usr/bin:</span><span class="si">${</span><span class="nv">DOWNLOAD_DIR</span><span class="si">}</span><span class="s2">:g&#34;</span> <span class="p">|</span> sudo tee /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
</span></span></code></pre></div><div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Vui lòng tham khảo ghi chú trong phần <a href="#before-you-begin">Trước khi bạn bắt đầu</a> cho các bản phân phối Linux
mà mặc định không có <code>glibc</code>.</div>
<p>Cài đặt <code>kubectl</code> bằng cách làm theo các hướng dẫn trên <a href="/vi/docs/tasks/tools/#kubectl">trang Cài đặt các công cụ</a>.</p>
<p>Một cách tùy chọn, bật dịch vụ kubelet trước khi chạy kubeadm:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo systemctl <span class="nb">enable</span> --now kubelet
</span></span></code></pre></div><div class="alert alert-info" role="note"><h4 class="alert-heading">Lưu ý:</h4>Bản phân phối Linux Flatcar Container gắn thư mục <code>/usr</code> thành một hệ thống file chỉ đọc.
Xem <a href="/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/#usr-mounted-read-only">hướng dẫn Khắc phục sự cố Kubeadm</a>
để biết cách thiết lập một thư mục có thể ghi.</div>
</div></div>


Bây giờ kubelet khởi động sau mỗi vài giây, vì nó đợi trong vòng lặp crashloop chờ
kubeadm bảo nó phải làm gì.

## Cấu hình cgroup driver

Cả container runtime và kubelet có một thuộc tính gọi là
["cgroup driver"](/docs/setup/production-environment/container-runtimes/#cgroup-drivers), cái mà quan trọng
cho việc quản lý các cgroup trên các máy Linux.

<div class="alert alert-danger" role="note"><h4 class="alert-heading">Cảnh báo:</h4><p>Làm cho khớp các cgroup driver của container runtime và kubelet là bắt buộc hoặc nếu không thì tiến trình kubelet sẽ lỗi.</p>
<p>Xem <a href="/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/">Cấu hình cgroup driver</a> để biết thêm chi tiết.</p>
</div>


## Khắc phục sự cố

Nếu bạn đang gặp các khó khăn với kubeadm, vui lòng tham khảo
[tài liệu khắc phục sự cố](/docs/setup/production-environment/tools/kubeadm/troubleshooting-kubeadm/) của chúng tôi.

## Tiếp theo là gì

* [Sử dụng kubeadm để Tạo một cụm](/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/)
