Thuật ngữ chuẩn hóa
Bảng từ vựng này được thiết kế để là một danh sách toàn diện, chuẩn hóa các thuật ngữ của Kubernetes. Nó bao gồm các thuật ngữ kỹ thuật cụ thể cho Kubernetes, cũng như các thuật ngữ tổng quát mang lại ngữ cảnh hữu ích.
Lọc các thuật ngữ theo các thẻ của chúng
Nhấp vào [+] dưới đây để có một giải thích chi tiết hơn cho bất kỳ thuật ngữ cụ thể nào.
Resources that extend the functionality of Kubernetes.
[+]Installing addons explains more about using add-ons with your cluster, and lists some popular add-ons.
A piece of code that intercepts requests to the Kubernetes API server prior to persistence of the object.
[+]Admission controllers are configurable for the Kubernetes API server and may be "validating", "mutating", or both. Any admission controller may reject the request. Mutating controllers may modify the objects they admit; validating controllers may not.
Trong Kubernetes, affinity là một tập hợp các quy tắc cung cấp gợi ý cho scheduler về vị trí phân phối pod.
[+]The aggregation layer lets you install additional Kubernetes-style APIs in your cluster.
[+]When you've configured the Kubernetes API Server to support additional APIs, you can add
APIService
objects to "claim" a URL path in the Kubernetes API.Một tập những đường dẫn tương đối đến Kubernetes API.
[+]Bạn có thể cho phép hay vô hiệu từng API group bằng cách thay đổi cấu hình trên API server của mình. Đồng thời bạn cũng có thể vô hiệu hay kích hoạt các đường dẫn cho những tài nguyên cụ thể. API group đơn giản hóa việc mở rộng Kubernetes API. Nó được chỉ định dưới dạng REST và trong trường
apiVersion
của một đối tượng đã được chuyển hóa.- Đọc thêm về API Group.
- Còn được biết đến là: Resource
Một thực thể trong hệ thống kiểu dữ liệu của Kubernetes, tương ứng với một endpoint trên Kubernetes API. Một resource thường đại diện cho một object. Một số resource đại diện cho một thao tác trên các object khác, ví dụ như kiểm tra quyền.
[+]Mỗi resource đại diện cho một HTTP endpoint (URI) trên Kubernetes API server, định nghĩa schema cho các object hoặc các thao tác trên resource đó.
- Còn được biết đến là: kube-apiserver
API server là một thành phần của Kubernetes control plane, được dùng để đưa ra Kubernetes API. API server là front end của Kubernetes control plane.
[+]Thực thi chính của API server là kube-apiserver. kube-apiserver được thiết kế để co giãn theo chiều ngang — có nghĩa là nó co giãn bằng cách triển khai thêm các thực thể. Bạn có thể chạy một vài thực thể của kube-apiserver và cân bằng lưu lượng giữa các thực thể này.
API-initiated eviction is the process by which you use the Eviction API to create an
[+]Eviction
object that triggers graceful pod termination.You can request eviction either by directly calling the Eviction API using a client of the kube-apiserver, like the
kubectl drain
command. When anEviction
object is created, the API server terminates the Pod.API-initiated evictions respect your configured
PodDisruptionBudgets
andterminationGracePeriodSeconds
.API-initiated eviction is not the same as node-pressure eviction.
- See API-initiated eviction for more information.
Application container (hay app container) là các container trong một pod được khởi động sau khi tất cả các init container đã hoàn thành.
[+]Init container cho phép bạn tách riêng các chi tiết khởi tạo quan trọng cho toàn bộ workload, và không cần phải tiếp tục chạy sau khi application container đã được khởi động. Nếu một pod không có init container nào được cấu hình, tất cả các container trong pod đó đều là app container.
A person responsible for the high-level design of an application.
[+]An architect ensures that an app's implementation allows it to interact with its surrounding components in a scalable, maintainable way. Surrounding components include databases, logging infrastructure, and other microservices.
A person who writes an application that runs in a Kubernetes cluster.
[+]An application developer focuses on one part of an application. The scale of their focus may vary significantly in size.
A person who can review and approve Kubernetes code contributions.
[+]While code review is focused on code quality and correctness, approval is focused on the holistic acceptance of a contribution. Holistic acceptance includes backwards/forwards compatibility, adhering to API and flag conventions, subtle performance and correctness issues, interactions with other parts of the system, and others. Approver status is scoped to a part of the codebase. Approvers were previously referred to as maintainers.
Biến môi trường của container là một cặp Tên-Giá trị nhằm cung cấp những thông tin hữu ích vô trong những containers bên trong một Pod.
[+]Biến môi trường của container cung cấp thông tin cần thiết cho mỗi ứng dụng cùng với những thông tin về những resources quan trọng đối với Containers đó. Ví dụ, thông tin chi tiết về file system, thông tin về bản thân của chính container đó, và những resources khác ở trong cluster như điểm kết của một services.
cAdvisor (Container Advisor) provides container users an understanding of the resource usage and performance characteristics of their running containers.
[+]It is a running daemon that collects, aggregates, processes, and exports information about running containers. Specifically, for each container it keeps resource isolation parameters, historical resource usage, histograms of complete historical resource usage and network statistics. This data is exported by container and machine-wide.
A cryptographically secure file used to validate access to the Kubernetes cluster.
[+]Certificates enable applications within a Kubernetes cluster to access the Kubernetes API securely. Certificates validate that clients are allowed to access the API.
Một nhóm các process trên Linux với sự tùy chọn trong cô lập tài nguyên, trách nhiệm và giới hạn.
[+]cgroup là một tính năng của Linux kernel giúp giới hạn, giao trách nhiệm, và cô lập việc sử dụng các tài nguyên trên máy (CPU, memory, disk I/O, network) cho một tập các process.
Một cặp khóa-giá trị được sử dụng để đính kèm tùy ý một metadata không xác định cụ thể vào các đối tượng.
[+]Metadata (siêu dữ liệu) có trong một annotation có thể nhỏ hoặc lớn, có cấu trúc hoặc không, và có thể bao gồm những kí tự không được cho phép như Labels. Các công cụ và thư viện ở phía client có thể thu thập những metadata này.
CIDR (Classless Inter-Domain Routing) is a notation for describing blocks of IP addresses and is used heavily in various networking configurations.
[+]Terms under which a contributor grants a license to an open source project for their contributions.
[+]CLAs help resolve legal disputes involving contributed material and intellectual property (IP).
A Kubernetes control plane component that embeds cloud-specific control logic. The cloud controller manager lets you link your cluster into your cloud provider's API, and separates out the components that interact with that cloud platform from components that only interact with your cluster.
[+]By decoupling the interoperability logic between Kubernetes and the underlying cloud infrastructure, the cloud-controller-manager component enables cloud providers to release features at a different pace compared to the main Kubernetes project.
Cloud Native Computing Foundation (CNCF) xây dựng các hệ sinh thái bền vững và thúc đẩy cộng đồng xung quanh các dự án mà điều phối các container như một phần của kiến trúc microservices.
Kubernetes là một dự án CNCF.
[+]CNCF là một tổ chức con của Linux Foundation. Sứ mệnh của nó là làm cho điện toán đám mây trở nên phổ biến.
- Còn được biết đến là: Cloud Service Provider
A business or other organization that offers a cloud computing platform.
[+]Cloud providers, sometimes called Cloud Service Providers (CSPs), offer cloud computing platforms or services.
Many cloud providers offer managed infrastructure (also called Infrastructure as a Service or IaaS). With managed infrastructure the cloud provider is responsible for servers, storage, and networking while you manage layers on top of that such as running a Kubernetes cluster.
You can also find Kubernetes as a managed service; sometimes called Platform as a Service, or PaaS. With managed Kubernetes, your cloud provider is responsible for the Kubernetes control plane as well as the nodes and the infrastructure they rely on: networking, storage, and possibly other elements such as load balancers.
Một tập các worker machine, được gọi là node, dùng để chạy các containerized application. Mỗi cụm (cluster) có ít nhất một worker node.
[+]Các worker node chứa các pod (là những thành phần của ứng dụng). Control Plane quản lý các worker node và pod trong cluster. Trong môi trường sản phẩm (production environment), Control Plane thường chạy trên nhiều máy tính và một cluster thường chạy trên nhiều node, cung cấp khả năng chịu lỗi (fault-tolerance) và tính sẵn sàng cao (high availability).
A person who designs infrastructure that involves one or more Kubernetes clusters.
[+]Cluster architects are concerned with best practices for distributed systems, for example: high availability and security.
- The infrastructure layer provides and maintains VMs, networking, security groups and others. [+]
The infrastructure layer provides and maintains VMs, networking, security groups and others.
The work involved in managing a Kubernetes cluster: managing day-to-day operations, and co-ordinating upgrades.
[+]Examples of cluster operations work include: deploying new Nodes to scale the cluster; performing software upgrades; implementing security controls; adding or removing storage; configuring cluster networking; managing cluster-wide observability; and responding to events.
A person who configures, controls, and monitors clusters.
[+]Their primary responsibility is keeping a cluster up and running, which may involve periodic maintenance activities or upgrades.
Note:
Cluster operators are different from the Operator pattern that extends the Kubernetes API.A person who develops and contributes code to the Kubernetes open source codebase.
[+]They are also an active community member who participates in one or more Special Interest Groups (SIGs).
An API object used to store non-confidential data in key-value pairs. Pods can consume ConfigMaps as environment variables, command-line arguments, or as configuration files in a volume.
[+]A ConfigMap allows you to decouple environment-specific configuration from your container images, so that your applications are easily portable.
Một image nhẹ, khả chuyển và có khả năng thực thi, chứa phần mềm và tất cả các dependencies của nó.
[+]Containers tách rời các ứng dụng khỏi hạ tầng máy chủ nhằm giúp cho việc triển khai dễ dàng hơn trên từng hệ thống cloud hay hệ điều hành khác nhau, và đơn giản hóa việc nhân rộng.
The lifecycle hooks expose events in the Container management lifecycle and let the user run code when the events occur.
[+]Two hooks are exposed to Containers: PostStart which executes immediately after a container is created and PreStop which is blocking and is called immediately before a container is terminated.
Container network interface (CNI) plugins là một loại Network plugin mà tuân thủ đặc điểm kỹ thuật của appc/CNI.
[+]- Để biết thêm thông tin về Kubernetes và CNI, xem Network Plugins.
Một thành phần cơ bản mà ủy quyền cho Kubernetes chạy các container một cách có hiệu quả. Nó chịu trách nhiệm quản lý việc thực thi và vòng đời của các container trong môi trường Kubernetes.
[+]Kubernetes hỗ trợ các container runtime như containerd, CRI-O, và bất kỳ những triển khai nào của Kubernetes CRI (Container Runtime Interface).
The Container Storage Interface (CSI) defines a standard interface to expose storage systems to containers.
[+]CSI allows vendors to create custom storage plugins for Kubernetes without adding them to the Kubernetes repository (out-of-tree plugins). To use a CSI driver from a storage provider, you must first deploy it to your cluster. You will then be able to create a Storage Class that uses that CSI driver.
- Tầng điều khiển container, được dùng để đưa ra API và các interface để định nghĩa, triển khai, và quản lý vòng đời của các container. [+]
Tầng điều khiển container, được dùng để đưa ra API và các interface để định nghĩa, triển khai, và quản lý vòng đời của các container.
Một công cụ giúp bạn sử dụng các OCI container runtime với Kubernetes CRI.
[+]CRI-O là một thực thi của Container runtime interface (CRI) để cho phép sử dụng các container runtime cái mà tương thích với Open Container Initiative (OCI) runtime spec.
Triển khai CRI-O cho phép Kubernetes sử dụng bất kì OCI-compliant runtime như container runtime để chạy Pods, và để lấy CRI container image từ các remote registry.
Những đoạn custom code chỉ định một loại tài nguyên được thêm vào Kubenretes API server mà không cần thiết phải xây dựng một custom server hoàn chỉnh.
[+]Custom Resource Definitions cho phép bạn có thể mở rộng Kubernetes API cho môi trường của bạn trong trường hợp những API được cung cấp sẵn không đáp ứng được các nhu cầu của bạn.
- The layer that provides capacity such as CPU, memory, network, and storage so that the containers can run and connect to a network. [+]
The layer that provides capacity such as CPU, memory, network, and storage so that the containers can run and connect to a network.
May refer to: Application Developer, Code Contributor, or Platform Developer.
[+]This overloaded term may have different meanings depending on the context
Device plugin chạy trên các worker Node và cung cấp cho Pod khả năng truy cập vào các tài nguyên, chẳng hạn như phần cứng cục bộ, mà yêu cầu các bước khởi tạo hoặc thiết lập đặc thù từ nhà cung cấp.
[+]Device plugin quảng bá các tài nguyên đến kubelet, để các Pod chạy workload có thể truy cập các tính năng phần cứng liên quan đến Node nơi Pod đó đang chạy. Bạn có thể triển khai device plugin dưới dạng DaemonSet, hoặc cài đặt phần mềm device plugin trực tiếp trên mỗi Node đích.
Xem thêm Device Plugins để biết thêm thông tin.
Disruptions are events that lead to one or more Pods going out of service. A disruption has consequences for workload resources, such as Deployment, that rely on the affected Pods.
[+]If you, as cluster operator, destroy a Pod that belongs to an application, Kubernetes terms that a voluntary disruption. If a Pod goes offline because of a Node failure, or an outage affecting a wider failure zone, Kubernetes terms that an involuntary disruption.
See Disruptions for more information.
Docker (cụ thể là Docker Engine) là một công nghệ phần mềm thực hiện việc ảo hóa tầng hệ điều hành, còn được gọi là container.
[+]Docker sử dụng khả năng cô lập các tài nguyên của Linux kernel như cgroups và kernel namespaces, cùng với một hệ thống tệp tin có khả năng kết hợp như OverlayFS và một vài thành phần khác để các containers có thể chạy độc lập trên cùng một máy Linux, tránh được việc bị overhead khi khởi động và bảo trì máy ảo (VMs).
The dockershim is a component of Kubernetes version 1.23 and earlier. It allows the kubelet to communicate with Docker Engine.
[+]Starting with version 1.24, dockershim has been removed from Kubernetes. For more information, see Dockershim FAQ.
May refer to: code in the Kubernetes ecosystem that depends upon the core Kubernetes codebase or a forked repo.
[+]- In the Kubernetes Community: Conversations often use downstream to mean the ecosystem, code, or third-party tools that rely on the core Kubernetes codebase. For example, a new feature in Kubernetes may be adopted by applications downstream to improve their functionality.
- In GitHub or git: The convention is to refer to a forked repo as downstream, whereas the source repo is considered upstream.
Kubernetes' mechanism to expose Pod and container field values to code running in a container.
[+]It is sometimes useful for a container to have information about itself, without needing to make changes to the container code that directly couple it to Kubernetes.
The Kubernetes downward API allows containers to consume information about themselves or their context in a Kubernetes cluster. Applications in containers can have access to that information, without the application needing to act as a client of the Kubernetes API.
There are two ways to expose Pod and container fields to a running container:
- using environment variables
- using a
downwardAPI
volume
Together, these two ways of exposing Pod and container fields are called the downward API.
A string value representing an amount of time.
[+]The format of a (Kubernetes) duration is based on the
time.Duration
type from the Go programming language.In Kubernetes APIs that use durations, the value is expressed as series of a non-negative integers combined with a time unit suffix. You can have more than one time quantity and the duration is the sum of those time quantities. The valid time units are "ns", "µs" (or "us"), "ms", "s", "m", and "h".
For example:
5s
represents a duration of five seconds, and1m30s
represents a duration of one minute and thirty seconds.Allows users to request automatic creation of storage Volumes.
[+]Dynamic provisioning eliminates the need for cluster administrators to pre-provision storage. Instead, it automatically provisions storage by user request. Dynamic volume provisioning is based on an API object, StorageClass, referring to a Volume Plugin that provisions a Volume and the set of parameters to pass to the Volume Plugin.
An endpoint of a Service is one of the Pods (or external servers) that implements the Service.
[+]For Services with selectors, the EndpointSlice controller will automatically create one or more EndpointSlices giving the IP addresses of the selected endpoint Pods.
EndpointSlices can also be created manually to indicate the endpoints of Services that have no selector specified.
A Container type that you can temporarily run inside a Pod.
[+]If you want to investigate a Pod that's running with problems, you can add an ephemeral container to that Pod and carry out diagnostics. Ephemeral containers have no resource or scheduling guarantees, and you should not use them to run any part of the workload itself.
Ephemeral containers are not supported by static pods.
Key value store nhất quán (consistent) và sẵn sàng cao (highly-available) được sử dụng như một kho lưu trữ của Kubernetes cho tất cả dữ liệu của cluster.
[+]Nếu Kubernetes cluster của bạn sử dụng etcd như kho lưu trữ của nó, chắc chắn bạn có một kế hoạch back up cho những dữ liệu này.
Bạn có thể tìm thêm thông tin chi tiết về etcd tại documentation.
Event is a Kubernetes object that describes state change/notable occurrences in the system.
[+]Events have a limited retention time and triggers and messages may evolve with time. Event consumers should not rely on the timing of an event with a given reason reflecting a consistent underlying trigger, or the continued existence of events with that reason.
Events should be treated as informative, best-effort, supplemental data.
In Kubernetes, auditing generates a different kind of Event record (API group
audit.k8s.io
).Eviction is the process of terminating one or more Pods on Nodes.
[+]There are two kinds of eviction:
Extensions are software components that extend and deeply integrate with Kubernetes to support new types of hardware.
[+]Many cluster administrators use a hosted or distribution instance of Kubernetes. These clusters come with extensions pre-installed. As a result, most Kubernetes users will not need to install extensions and even fewer users will need to author new ones.
Feature gates are a set of keys (opaque string values) that you can use to control which Kubernetes features are enabled in your cluster.
[+]You can turn these features on or off using the
--feature-gates
command line flag on each Kubernetes component. Each Kubernetes component lets you enable or disable a set of feature gates that are relevant to that component. The Kubernetes documentation lists all current feature gates and what they control.Finalizers are namespaced keys that tell Kubernetes to wait until specific conditions are met before it fully deletes resources marked for deletion. Finalizers alert controllers to clean up resources the deleted object owned.
[+]When you tell Kubernetes to delete an object that has finalizers specified for it, the Kubernetes API marks the object for deletion by populating
.metadata.deletionTimestamp
, and returns a202
status code (HTTP "Accepted"). The target object remains in a terminating state while the control plane, or other components, take the actions defined by the finalizers. After these actions are complete, the controller removes the relevant finalizers from the target object. When themetadata.finalizers
field is empty, Kubernetes considers the deletion complete and deletes the object.You can use finalizers to control garbage collection of resources. For example, you can define a finalizer to clean up related resources or infrastructure before the controller deletes the target resource.
FlexVolume is a deprecated interface for creating out-of-tree volume plugins. The Container Storage Interface is a newer interface that addresses several problems with FlexVolume.
[+]FlexVolumes enable users to write their own drivers and add support for their volumes in Kubernetes. FlexVolume driver binaries and dependencies must be installed on host machines. This requires root access. The Storage SIG suggests implementing a CSI driver if possible since it addresses the limitations with FlexVolumes.
Garbage collection is a collective term for the various mechanisms Kubernetes uses to clean up cluster resources.
[+]Kubernetes uses garbage collection to clean up resources like unused containers and images, failed Pods, objects owned by the targeted resource, completed Jobs, and resources that have expired or failed.
A family of API kinds for modeling service networking in Kubernetes.
[+]Gateway API provides a family of extensible, role-oriented, protocol-aware API kinds for modeling service networking in Kubernetes.
- Còn được biết đến là: GVR
Means of representing unique Kubernetes API resource.
[+]Group Version Resources (GVRs) specify the API group, API version, and resource (name for the object kind as it appears in the URI) associated with accessing a particular id of object in Kubernetes. GVRs let you define and distinguish different Kubernetes objects, and to specify a way of accessing objects that is stable even as APIs change.
A package of pre-configured Kubernetes resources that can be managed with the Helm tool.
[+]Charts provide a reproducible way of creating and sharing Kubernetes applications. A single chart can be used to deploy something simple, like a memcached Pod, or something complex, like a full web app stack with HTTP servers, databases, caches, and so on.
- Còn được biết đến là: HPA
An API resource that automatically scales the number of Pod replicas based on targeted CPU utilization or custom metric targets.
[+]HPA is typically used with ReplicationControllers, Deployments, or ReplicaSets. It cannot be applied to objects that cannot be scaled, for example DaemonSets.
A HostAliases is a mapping between the IP address and hostname to be injected into a Pod's hosts file.
[+]HostAliases is an optional list of hostnames and IP addresses that will be injected into the Pod's hosts file if specified. This is only valid for non-hostNetwork Pods.
Stored instance of a Container that holds a set of software needed to run an application.
[+]A way of packaging software that allows it to be stored in a container registry, pulled to a local system, and run as an application. Meta data is included in the image that can indicate what executable to run, who built it, and other information.
Immutable Infrastructure refers to computer infrastructure (virtual machines, containers, network appliances) that cannot be changed once deployed.
[+]Immutability can be enforced by an automated process that overwrites unauthorized changes or through a system that won’t allow changes in the first place. Containers are a good example of immutable infrastructure because persistent changes to containers can only be made by creating a new version of the container or recreating the existing container from its image.
By preventing or identifying unauthorized changes, immutable infrastructures make it easier to identify and mitigate security risks. Operating such a system becomes a lot more straightforward because administrators can make assumptions about it. After all, they know no one made mistakes or changes they forgot to communicate. Immutable infrastructure goes hand-in-hand with infrastructure as code where all automation needed to create infrastructure is stored in version control (such as Git). This combination of immutability and version control means that there is a durable audit log of every authorized change to a system.
An API object that manages external access to the services in a cluster, typically HTTP.
[+]Ingress may provide load balancing, SSL termination and name-based virtual hosting.
Một hoặc nhiều container khởi tạo phải chạy hoàn tất trước khi bất kỳ app container nào chạy.
[+]Container khởi tạo (init container) tương tự như các app container thông thường, với một điểm khác biệt: init container phải chạy hoàn tất trước khi bất kỳ app container nào có thể bắt đầu. Các init container chạy tuần tự: mỗi init container phải chạy hoàn tất trước khi init container tiếp theo bắt đầu.
Khác với sidecar container, init container không tiếp tục chạy sau khi Pod khởi động.
Để biết thêm thông tin, hãy đọc init containers.
An open platform (not Kubernetes-specific) that provides a uniform way to integrate microservices, manage traffic flow, enforce policies, and aggregate telemetry data.
[+]Adding Istio does not require changing application code. It is a layer of infrastructure between a service and the network, which when combined with service deployments, is commonly referred to as a service mesh. Istio's control plane abstracts away the underlying cluster management platform, which may be Kubernetes, Mesosphere, etc.
A means of representing claims to be transferred between two parties.
[+]JWTs can be digitally signed and encrypted. Kubernetes uses JWTs as authentication tokens to verify the identity of entities that want to perform actions in a cluster.
[+]kOps
will not only help you create, destroy, upgrade and maintain production-grade, highly available, Kubernetes cluster, but it will also provision the necessary cloud infrastructure.Note:
AWS (Amazon Web Services) is currently officially supported, with DigitalOcean, GCE and OpenStack in beta support, and Azure in alpha.kOps
is an automated provisioning system:- Fully automated installation
- Uses DNS to identify clusters
- Self-healing: everything runs in Auto-Scaling Groups
- Multiple OS support (Amazon Linux, Debian, Flatcar, RHEL, Rocky and Ubuntu)
- High-Availability support
- Can directly provision, or generate terraform manifests
Control plane component that runs controller processes.
[+]Logically, each controller is a separate process, but to reduce complexity, they are all compiled into a single binary and run in a single process.
kube-proxy là một network proxy chạy trên mỗi node trong cluster, thực hiện một phần Kubernetes Service.
[+]kube-proxy duy trình network rules trên các node. Những network rules này cho phép kết nối mạng đến các pods từ trong hoặc ngoài cluster.
Kube-proxy sử dụng lớp packet filtering của hệ điều hành nếu có sẵn. Nếu không thì kube-proxy sẽ tự điều hướng network traffic.
Thành phần của Control Plane, được dùng để giám sát việc tạo những pod mới mà chưa được chỉ định vào node nào, và chọn một node để chúng chạy trên đó.
[+]Những yếu tố trong những quyết định lập lịch bao gồm những yêu cầu về tài nguyên, những đòi hỏi về phần cứng/phần mềm/chính sách, những thông số về affinity và anti-affinity, dữ liệu tại chỗ (data locality), nhiễu inter-workload và thời hạn (deadline).
Một công cụ giúp cài đặt Kubernetes một cách nhanh chóng và thiết lập một cụm bảo mật.
[+]Bạn có thể sử dụng kubeadm để cài đặt cả các thành phần control plane và worker node.
- Còn được biết đến là: kubectl
Command line tool for communicating with a Kubernetes cluster's control plane, using the Kubernetes API.
[+]You can use
kubectl
to create, inspect, update, and delete Kubernetes objects.In English,
kubectl
is (officially) pronounced /kjuːb/ /kənˈtɹəʊl/ (like "cube control"). 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.
[+]Kubelet sẽ nhận một tập các PodSpecs (đặc tính của Pod) được cung cấp thông qua các cơ chế khác nhau và bảo đảm rằng containers được mô tả trong những PodSpecs này chạy ổn định và khỏe mạnh. Kubelet không quản lý những containers không được tạo bởi Kubernetes.
Ứng dụng cung cấp các chức năng của Kubernetes thông qua giao diện RESTful và lưu trữ trạng thái của cluster.
[+]Các tài nguyên Kubernetes và "bản ghi ý định" đều được lưu trữ dưới dạng các API object, và được sửa đổi thông qua các lệnh gọi RESTful đến API. API cho phép quản lý cấu hình bằng cách khai báo. Người dùng có thể tương tác trực tiếp với Kubernetes API, hoặc thông qua các công cụ như
kubectl
. Kubernetes API có tính linh hoạt và cũng có thể được mở rộng để hỗ trợ các tài nguyên tùy chỉnh.Provides constraints to limit resource consumption per Containers or Pods in a namespace.
[+]LimitRange limits the quantity of objects that can be created by type, as well as the amount of compute resources that may be requested/consumed by individual Containers or Pods in a namespace.
Một dịch vụ phần mềm được duy trì bởi nhà cung cấp bên thứ ba.
[+]Một số ví dụ về Managed Service là AWS EC2, Azure SQL Database, và GCP Pub/Sub, nhưng có thể là bất kỳ dịch vụ phần mềm nào có thể được sử dụng bởi một ứng dụng.
Legacy term, used as synonym for nodes hosting the control plane.
[+]The term is still being used by some provisioning tools, such as kubeadm, and managed services, to label nodes with
kubernetes.io/role
and control placement of control plane pods.A tool for running Kubernetes locally.
[+]Minikube runs an all-in-one or a multi-node local Kubernetes cluster inside a VM on your computer. You can use Minikube to try Kubernetes in a learning environment.
A pod object that a kubelet uses to represent a static pod
[+]When the kubelet finds a static pod in its configuration, it automatically tries to create a Pod object on the Kubernetes API server for it. This means that the pod will be visible on the API server, but cannot be controlled from there.
(For example, removing a mirror pod will not stop the kubelet daemon from running it).
- Còn được biết đến là: MVP
Feature to let a kube-apiserver proxy a resource request to a different peer API server.
[+]When a cluster has multiple API servers running different versions of Kubernetes, this feature enables resource requests to be served by the correct API server.
MVP is disabled by default and can be activated by enabling the feature gate named
UnknownVersionInteroperabilityProxy
when the API Server is started. A client-provided string that refers to an object in a resource URL, such as
[+]/api/v1/pods/some-name
.Only one object of a given kind can have a given name at a time. However, if you delete the object, you can make a new object with the same name.
An abstraction used by Kubernetes to support isolation of groups of resources within a single cluster.
[+]Namespaces are used to organize objects in a cluster and provide a way to divide cluster resources. Names of resources need to be unique within a namespace, but not across namespaces. Namespace-based scoping is applicable only for namespaced objects (e.g. Deployments, Services, etc) and not for cluster-wide objects (e.g. StorageClass, Nodes, PersistentVolumes, etc).
A specification of how groups of Pods are allowed to communicate with each other and with other network endpoints.
[+]Network Policies help you declaratively configure which Pods are allowed to connect to each other, which namespaces are allowed to communicate, and more specifically which port numbers to enforce each policy on.
NetworkPolicy
resources use labels to select Pods and define rules which specify what traffic is allowed to the selected Pods. Network Policies are implemented by a supported network plugin provided by a network provider. Be aware that creating a network resource without a controller to implement it will have no effect.Người đóng góp mã nguồn, tài liệu hoặc thời gian để hỗ trợ dự án hoặc cộng đồng Kubernetes.
[+]Các đóng góp bao gồm gửi pull request (PR), tạo issue, phản hồi, tham gia nhóm quan tâm đặc biệt (SIG), hoặc tổ chức các sự kiện cộng đồng.
Một node là một máy worker trong Kubernetes
[+]Một worker node có thể là một máy tính ảo hay máy tính vậy lý, tùy thuộc vào cluster. Nó bao gồm một số daemons hoặc services cần thiết để chạy các Pods và được quản lý bởi control plane. Daemons trên một node bao gồm kubelet, kube-proxy, và một container runtime triển khai theo CRI như Docker.
- Còn được biết đến là: kubelet eviction
Node-pressure eviction is the process by which the kubelet proactively terminates pods to reclaim resources on nodes.
[+]The kubelet monitors resources like CPU, memory, disk space, and filesystem inodes on your cluster's nodes. When one or more of these resources reach specific consumption levels, the kubelet can proactively fail one or more pods on the node to reclaim resources and prevent starvation.
Node-pressure eviction is not the same as API-initiated eviction.
Một thực thể trong hệ thống Kubernetes. Một object là một API resource mà Kubernetes API sử dụng để đại diện cho trạng thái của cluster của bạn.
[+]Một Kubernetes object thường là một "bản ghi ý định"—khi bạn tạo object, control plane của Kubernetes làm việc liên tục để đảm bảo rằng thành phần mà nó đại diện thực sự tồn tại. Bằng cách tạo một object, bạn đang thực sự nói với hệ thống Kubernetes về việc bạn muốn phần workload của cluster của bạn trông như thế nào; đây là trạng thái mong muốn của cluster của bạn.
The operator pattern is a system design that links a Controller to one or more custom resources.
[+]You can extend Kubernetes by adding controllers to your cluster, beyond the built-in controllers that come as part of Kubernetes itself.
If a running application acts as a controller and has API access to carry out tasks against a custom resource that's defined in the control plane, that's an example of the Operator pattern.
An API object that represents a piece of storage in the cluster. Available as a general, pluggable resource that persists beyond the lifecycle of any individual Pod.
[+]PersistentVolumes (PVs) provide an API that abstracts details of how storage is provided from how it is consumed. PVs are used directly in scenarios where storage can be created ahead of time (static provisioning). For scenarios that require on-demand storage (dynamic provisioning), PersistentVolumeClaims (PVCs) are used instead.
Claims storage resources defined in a PersistentVolume so that it can be mounted as a volume in a container.
[+]Specifies the amount of storage, how the storage will be accessed (read-only, read-write and/or exclusive) and how it is reclaimed (retained, recycled or deleted). Details of the storage itself are described in the PersistentVolume object.
A person who customizes the Kubernetes platform to fit the needs of their project.
[+]A platform developer may, for example, use Custom Resources or Extend the Kubernetes API with the aggregation layer to add functionality to their instance of Kubernetes, specifically for their application. Some Platform Developers are also contributors and develop extensions which are contributed to the Kubernetes community. Others develop closed-source commercial or site-specific extensions.
Đối tượng nhỏ nhất và đơn giản nhất của Kubernetes. Một Pod đại diện cho một tập các containers đang chạy trên cluster.
[+]Một Pod thường được set up để chạy với một container chính yếu. Nó đồng thời có thể chạy kèm với các sidecar containers giúp bổ trợ thêm một số tính năng như thu thập log. Các Pods thường được quản lý bởi một Deployment.
Pod disruption is the process by which Pods on Nodes are terminated either voluntarily or involuntarily.
[+]Voluntary disruptions are started intentionally by application owners or cluster administrators. Involuntary disruptions are unintentional and can be triggered by unavoidable issues like Nodes running out of resources, or by accidental deletions.
- Còn được biết đến là: PDB
A Pod Disruption Budget allows an application owner to create an object for a replicated application, that ensures a certain number or percentage of Pods with an assigned label will not be voluntarily evicted at any point in time.
[+]Involuntary disruptions cannot be prevented by PDBs; however they do count against the budget.
The sequence of states through which a Pod passes during its lifetime.
[+]The Pod Lifecycle is defined by the states or phases of a Pod. There are five possible Pod phases: Pending, Running, Succeeded, Failed, and Unknown. A high-level description of the Pod state is summarized in the PodStatus
phase
field.Pod Priority indicates the importance of a Pod relative to other Pods.
[+]Pod Priority gives the ability to set scheduling priority of a Pod to be higher and lower than other Pods — an important feature for production clusters workload.
Enables fine-grained authorization of Pod creation and updates.
[+]A cluster-level resource that controls security sensitive aspects of the Pod specification. The
PodSecurityPolicy
objects define a set of conditions that a Pod must run with in order to be accepted into the system, as well as defaults for the related fields. Pod Security Policy control is implemented as an optional admission controller.PodSecurityPolicy was deprecated as of Kubernetes v1.21, and removed in v1.25. As an alternative, use Pod Security Admission or a 3rd party admission plugin.
- Còn được biết đến là: pod template
An API object that defines a template for creating Pods. The PodTemplate API is also embedded in API definitions for workload management, such as Deployment or StatefulSets.
[+]Pod templates allow you to define common metadata (such as labels, or a template for the name of a new Pod) as well as to specify a pod's desired state. Workload management controllers use Pod templates (embedded into another object, such as a Deployment or StatefulSet) to define and manage one or more Pods. When there can be multiple Pods based on the same template, these are called replicas. Although you can create a PodTemplate object directly, you rarely need to do so.
A PriorityClass is a named class for the scheduling priority that should be assigned to a Pod in that class.
[+]A PriorityClass is a non-namespaced object mapping a name to an integer priority, used for a Pod. The name is specified in the
metadata.name
field, and the priority value in thevalue
field. Priorities range from -2147483648 to 1000000000 inclusive. Higher values indicate higher priority.A check that the kubelet periodically performs against a container that is running in a pod, that will define container's state and health and informing container's lifecycle.
[+]To learn more, read container probes.
In computing, a proxy is a server that acts as an intermediary for a remote service.
[+]A client interacts with the proxy; the proxy copies the client's data to the actual server; the actual server replies to the proxy; the proxy sends the actual server's reply to the client.
kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.
You can run kube-proxy as a plain userland proxy service. If your operating system supports it, you can instead run kube-proxy in a hybrid mode that achieves the same overall effect using less system resources.
QoS Class (Quality of Service Class) provides a way for Kubernetes to classify Pods within the cluster into several classes and make decisions about scheduling and eviction.
[+]QoS Class of a Pod is set at creation time based on its compute resources requests and limits settings. QoS classes are used to make decisions about Pods scheduling and eviction. Kubernetes can assign one of the following QoS classes to a Pod:
Guaranteed
,Burstable
orBestEffort
.A whole-number representation of small or large numbers using SI suffixes.
[+]Quantities are representations of small or large numbers using a compact, whole-number notation with SI suffixes. Fractional numbers are represented using milli units, while large numbers can be represented using kilo, mega, or giga units.
For instance, the number
1.5
is represented as1500m
, while the number1000
can be represented as1k
, and1000000
as1M
. You can also specify binary-notation suffixes; the number 2048 can be written as2Ki
.The accepted decimal (power-of-10) units are
m
(milli),k
(kilo, intentionally lowercase),M
(mega),G
(giga),T
(tera),P
(peta),E
(exa).The accepted binary (power-of-2) units are
Ki
(kibi),Mi
(mebi),Gi
(gibi),Ti
(tebi),Pi
(pebi),Ei
(exbi).Manages authorization decisions, allowing admins to dynamically configure access policies through the Kubernetes API.
[+]RBAC utilizes four kinds of Kubernetes objects:
- Role
- Defines permission rules in a specific namespace.
- ClusterRole
- Defines permission rules cluster-wide.
- RoleBinding
- Grants the permissions defined in a role to a set of users in a specific namespace.
- ClusterRoleBinding
- Grants the permissions defined in a role to a set of users cluster-wide.
For more information, see RBAC.
A copy or duplicate of a Pod or a set of pods. Replicas ensure high availability, scalability, and fault tolerance by maintaining multiple identical instances of a pod.
[+]Replicas are commonly used in Kubernetes to achieve the desired application state and reliability. They enable workload scaling and distribution across multiple nodes in a cluster.
By defining the number of replicas in a Deployment or ReplicaSet, Kubernetes ensures that the specified number of instances are running, automatically adjusting the count as needed.
Replica management allows for efficient load balancing, rolling updates, and self-healing capabilities in a Kubernetes cluster.
A ReplicaSet (aims to) maintain a set of replica Pods running at any given time.
[+]Workload objects such as Deployment make use of ReplicaSets to ensure that the configured number of Pods are running in your cluster, based on the spec of that ReplicaSet.
A workload resource that manages a replicated application, ensuring that a specific number of instances of a Pod are running.
[+]The control plane ensures that the defined number of Pods are running, even if some Pods fail, if you delete Pods manually, or if too many are started by mistake.
Note:
ReplicationController is deprecated. See Deployment, which is similar.Capabilities provided to one or more nodes (CPU, memory, GPUs, etc), and made available for consumption by Pods running on those nodes.
Kubernetes also uses the term resource to describe an API resource.
[+]Computers provide fundamental hardware facilities: processing power, storage memory, network, etc. These resources have finite capacity, measured in a unit applicable to that resource (number of CPUs, bytes of memory, etc). Kubernetes abstracts common resources for allocation to workloads and utilizes operating system primitives (for example, Linux cgroups) to manage consumption by workloads).
You can also use dynamic resource allocation to manage complex resource allocations automatically.
A person who reviews code for quality and correctness on some part of the project.
[+]Reviewers are knowledgeable about both the codebase and software engineering principles. Reviewer status is scoped to a part of the codebase.
Stores sensitive information, such as passwords, OAuth tokens, and SSH keys.
[+]Secrets give you more control over how sensitive information is used and reduces the risk of accidental exposure. Secret values are encoded as base64 strings and are stored unencrypted by default, but can be configured to be encrypted at rest.
A Pod can reference the Secret in a variety of ways, such as in a volume mount or as an environment variable. Secrets are designed for confidential data and ConfigMaps are designed for non-confidential data.
The
[+]securityContext
field defines privilege and access control settings for a Pod or container.In a
securityContext
, you can define: the user that processes run as, the group that processes run as, and privilege settings. You can also configure security policies (for example: SELinux, AppArmor or seccomp).The
PodSpec.securityContext
setting applies to all containers in a Pod.Một cách để thể hiện ứng dụng đang chạy trong một tập các Pods dưới dạng dịch vụ mạng.
[+]Một tập các Pods được một Service nhắm đến (thường) được xác định với một selector. Nếu có nhiều Pods được thêm vào hay xóa đi, tập những Pods hợp với selector sẽ thay đổi. Service đảm bảo network traffic có thể đến tới tập những Pods để giải quyết công việc.
A former extension API that enabled applications running in Kubernetes clusters to easily use external managed software offerings, such as a datastore service offered by a cloud provider.
[+]It provided a way to list, provision, and bind with external Managed Services without needing detailed knowledge about how those services would be created or managed.
Provides an identity for processes that run in a Pod.
[+]When processes inside Pods access the cluster, they are authenticated by the API server as a particular service account, for example,
default
. When you create a Pod, if you do not specify a service account, it is automatically assigned the default service account in the same Namespace.A technique for assigning requests to queues that provides better isolation than hashing modulo the number of queues.
[+]We are often concerned with insulating different flows of requests from each other, so that a high-intensity flow does not crowd out low-intensity flows. A simple way to put requests into queues is to hash some characteristics of the request, modulo the number of queues, to get the index of the queue to use. The hash function uses as input characteristics of the request that align with flows. For example, in the Internet this is often the 5-tuple of source and destination address, protocol, and source and destination port.
That simple hash-based scheme has the property that any high-intensity flow will crowd out all the low-intensity flows that hash to the same queue. Providing good insulation for a large number of flows requires a large number of queues, which is problematic. Shuffle-sharding is a more nimble technique that can do a better job of insulating the low-intensity flows from the high-intensity flows. The terminology of shuffle-sharding uses the metaphor of dealing a hand from a deck of cards; each queue is a metaphorical card. The shuffle-sharding technique starts with hashing the flow-identifying characteristics of the request, to produce a hash value with dozens or more of bits. Then the hash value is used as a source of entropy to shuffle the deck and deal a hand of cards (queues). All the dealt queues are examined, and the request is put into one of the examined queues with the shortest length. With a modest hand size, it does not cost much to examine all the dealt cards and a given low-intensity flow has a good chance to dodge the effects of a given high-intensity flow. With a large hand size it is expensive to examine the dealt queues and more difficult for the low-intensity flows to dodge the collective effects of a set of high-intensity flows. Thus, the hand size should be chosen judiciously.
Một hoặc nhiều container thường được khởi động trước khi bất kỳ app container nào chạy.
[+]Sidecar container tương tự như các app container thông thường, nhưng với một mục đích khác: sidecar cung cấp một dịch vụ cục bộ trong Pod cho container ứng dụng chính. Khác với init container, sidecar container tiếp tục chạy sau khi Pod khởi động.
Đọc thêm về Sidecar container để biết thêm thông tin.
Thành viên cộng đồng cùng nhau quản lý một phần hoặc khía cạnh liên tục của dự án mã nguồn mở Kubernetes.
[+]Các thành viên trong một SIG có cùng mối quan tâm phát triển một lĩnh vực cụ thể, như kiến trúc, cơ chế API, hoặc tài liệu. SIG phải tuân thủ hướng dẫn quản trị SIG, nhưng có thể có chính sách đóng góp và kênh giao tiếp riêng.
Để biết thêm thông tin, hãy xem kho kubernetes/community và danh sách hiện tại các SIG và Nhóm Làm Việc.
Defines how each object, like Pods or Services, should be configured and its desired state.
[+]Almost every Kubernetes object includes two nested object fields that govern the object's configuration: the object spec and the object status. For objects that have a spec, you have to set this when you create the object, providing a description of the characteristics you want the resource to have: its desired state.
It varies for different objects like Pods, StatefulSets, and Services, detailing settings such as containers, volumes, replicas, ports,
and other specifications unique to each object type. This field encapsulates what state Kubernetes should maintain for the defined
object.Quản lý việc triển khai và mở rộng một tập hợp các Pod, và đảm bảo về thứ tự và tính duy nhất của các Pod này.
[+]Giống như một Deployment, StatefulSet quản lý các Pod dựa trên một đặc tả container giống hệt nhau. Khác với Deployment, StatefulSet duy trì một định danh gắn kết cho mỗi Pod của nó. Các Pod này được tạo từ cùng một đặc tả, nhưng không thể hoán đổi cho nhau: mỗi Pod có một định danh cố định được duy trì xuyên suốt quá trình lập lịch lại.
Nếu bạn muốn sử dụng các volume lưu trữ để cung cấp tính bền vững cho workload của mình, bạn có thể sử dụng StatefulSet như một phần của giải pháp. Mặc dù các Pod riêng lẻ trong StatefulSet có thể gặp sự cố, các định danh cố định của Pod giúp việc khớp các volume hiện có với các Pod mới thay thế các Pod đã gặp sự cố dễ dàng hơn.
A pod managed directly by the kubelet daemon on a specific node,
[+]without the API server observing it.
Static Pods do not support ephemeral containers.
A StorageClass provides a way for administrators to describe different available storage types.
[+]StorageClasses can map to quality-of-service levels, backup policies, or to arbitrary policies determined by cluster administrators. Each StorageClass contains the fields
provisioner
,parameters
, andreclaimPolicy
, which are used when a Persistent Volume belonging to the class needs to be dynamically provisioned. Users can request a particular class using the name of a StorageClass object.
[+]sysctl
is a semi-standardized interface for reading or changing the attributes of the running Unix kernel.On Unix-like systems,
sysctl
is both the name of the tool that administrators use to view and modify these settings, and also the system call that the tool uses.Container runtimes and network plugins may rely on
sysctl
values being set a certain way.Là một đối tượng bao gồm ba thuộc tính bắt buộc: key, value, và effect. Taints (dấu chờ) ngăn cản việc lập lịch cho các pod chạy trên các node hay nhóm các node.
[+]Taints (dấu chờ) và tolerations hoạt động cùng với nhau để đảm bảo rằng các pod sẽ không lập lịch chạy lên những node không phù hợp. Có thể đặt một hoặc nhiều hơn một dấu chờ lên node. Một node chỉ có thể lập lịch chạy cho một pod với tolerations phù hợp với những dấu taint được cấu hình.
Một người đóng góp tích cực, liên tục trong cộng đồng K8s.
[+]Thành viên có thể được giao các issue và PR, và tham gia vào nhóm quan tâm đặc biệt (SIG) thông qua các nhóm GitHub. Các bài kiểm tra trước khi gửi (pre-submit tests) sẽ tự động chạy cho các PR của thành viên. Một thành viên được kỳ vọng sẽ tiếp tục đóng góp tích cực cho cộng đồng.
A Kubernetes systems-generated string to uniquely identify objects.
[+]Every object created over the whole lifetime of a Kubernetes cluster has a distinct UID. It is intended to distinguish between historical occurrences of similar entities.
May refer to: core Kubernetes or the source repo from which a repo was forked.
[+]- In the Kubernetes Community: Conversations often use upstream to mean the core Kubernetes codebase, which the general ecosystem, other code, or third-party tools rely upon. For example, community members may suggest that a feature is moved upstream so that it is in the core codebase instead of in a plugin or third-party tool.
- In GitHub or git: The convention is to refer to a source repo as upstream, whereas the forked repo is considered downstream.
A kernel feature to emulate root. Used for "rootless containers".
[+]User namespaces are a Linux kernel feature that allows a non-root user to emulate superuser ("root") privileges, for example in order to run containers without being a superuser outside the container.
User namespace is effective for mitigating damage of potential container break-out attacks.
In the context of user namespaces, the namespace is a Linux kernel feature, and not a namespace in the Kubernetes sense of the term.
- Một lớp nơi các ứng được đã được containerized chạy. [+]
Một lớp nơi các ứng được đã được containerized chạy.
A directory containing data, accessible to the containers in a Pod.
[+]A Kubernetes volume lives as long as the Pod that encloses it. Consequently, a volume outlives any containers that run within the Pod, and data in the volume is preserved across container restarts.
See storage for more information.
A Volume Plugin enables integration of storage within a Pod.
[+]A Volume Plugin lets you attach and mount storage volumes for use by a Pod. Volume plugins can be in tree or out of tree. In tree plugins are part of the Kubernetes code repository and follow its release cycle. Out of tree plugins are developed independently.
Trong hệ thống Kubernetes, các bộ controllers là các vòng lặp điều khiển theo dõi trạng thái của mỗi cluster, sau đó chúng sẽ tạo hoặc yêu cầu sự thay đổi cần thiết. Mỗi controller cố thực hiện việc thay đổi để giúp hệ thống chuyển từ trạng thái hiện tại sang trạng thái mong muốn.
[+]Vòng điều khiển lặp lại theo dõi trạng thái chung của cluster thông qua Kubernetes API server (một thần phần của Control Plane).
Một vài controllers chạy bên trong control plan, cung cấp các vòng lặp điều khiển vận hành nhân gốc của các hoạt động trong hệ thống Kubernetes. Ví dụ: với deployment controller, daemonset controller, namespace controller, và persistent volume controller (và một vài controller còn lại) đều chạy bên trong kube-controller-manager.
A verb that is used to track changes to an object in Kubernetes as a stream. It is used for the efficient detection of changes.
[+]A verb that is used to track changes to an object in Kubernetes as a stream. Watches allow efficient detection of changes; for example, a controller that needs to know whenever a ConfigMap has changed can use a watch rather than polling.
See Efficient Detection of Changes in API Concepts for more information.
Facilitates the discussion and/or implementation of a short-lived, narrow, or decoupled project for a committee, SIG, or cross-SIG effort.
[+]Working groups are a way of organizing people to accomplish a discrete task.
For more information, see the kubernetes/community repo and the current list of SIGs and working groups.
Workload là một ứng dụng chạy trên Kubernetes.
[+]Các đối tượng cốt lõi khác nhau đại diện cho các loại hoặc thành phần của workload bao gồm các đối tượng DaemonSet, Deployment, Job, ReplicaSet và StatefulSet.
Ví dụ, một workload có máy chủ web và cơ sở dữ liệu có thể chạy cơ sở dữ liệu trong một StatefulSet và máy chủ web trong một Deployment.
Phản hồi
Trang này có hữu ích không?
Cảm ơn bạn đã phản hồi. Nếu bạn có một câu hỏi cụ thể và có thể trả lời về cách sử dụng Kubernetes, hãy đặt nó trên Stack Overflow. Mở một vấn đề trong Kho GitHub nếu bạn muốn báo cáo một vấn đề hoặc đề xuất một cải tiến.