{"id":93233,"date":"2025-11-26T14:43:21","date_gmt":"2025-11-26T07:43:21","guid":{"rendered":"https:\/\/itviec.com\/blog\/?p=93233"},"modified":"2025-11-26T14:43:25","modified_gmt":"2025-11-26T07:43:25","slug":"kubernetes-tutorial","status":"publish","type":"post","link":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/","title":{"rendered":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">N\u1ed9i dung b\u00e0i vi\u1ebft<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Tong_quan_ve_Kubernetes\" >T\u1ed5ng quan v\u1ec1 Kubernetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Chuan_bi_moi_truong_de_su_dung_Kubernetes\" >Chu\u1ea9n b\u1ecb m\u00f4i tr\u01b0\u1eddng \u0111\u1ec3 s\u1eed d\u1ee5ng Kubernetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Cac_khai_niem_va_thanh_phan_chinh_trong_Kubernetes\" >C\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 th\u00e0nh ph\u1ea7n ch\u00ednh trong Kubernetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Tim_hieu_cac_tinh_nang_nang_cao\" >T\u00ecm hi\u1ec3u c\u00e1c t\u00ednh n\u0103ng n\u00e2ng cao&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Thuc_hanh_deploy_ung_dung_dau_tien_tren_Kubernetes\" >Th\u1ef1c h\u00e0nh deploy \u1ee9ng d\u1ee5ng \u0111\u1ea7u ti\u00ean tr\u00ean Kubernetes<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Khac_phuc_cac_loi_thuong_gap_khi_lam_viec_voi_Kubernetes\" >Kh\u1eafc ph\u1ee5c c\u00e1c l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi Kubernetes&nbsp;<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Sai_lam_thuong_gap_khi_su_dung_Kubernetes_va_cach_tranh\" >Sai l\u1ea7m th\u01b0\u1eddng g\u1eb7p khi s\u1eed d\u1ee5ng Kubernetes v\u00e0 c\u00e1ch tr\u00e1nh<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Cac_cau_hoi_thuong_gap_ve_Kubernetes_tutorial\" >C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Kubernetes tutorial<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#Tong_ket\" >T\u1ed5ng k\u1ebft<\/a><\/li><\/ul><\/nav><\/div>\n\n<p><strong><em>Kubernetes l\u00e0 m\u1ed9t trong nh\u1eefng c\u00f4ng c\u1ee5 quan tr\u1ecdng nh\u1ea5t \u0111\u1ed1i v\u1edbi DevOps v\u00e0 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y hi\u1ec7n nay, gi\u00fap qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng ch\u1ea1y trong container m\u1ed9t c\u00e1ch t\u1ef1 \u0111\u1ed9ng, linh ho\u1ea1t v\u00e0 \u0111\u00e1ng tin c\u1eady h\u01a1n. N\u1ebfu b\u1ea1n m\u1edbi b\u1eaft \u0111\u1ea7u t\u00ecm hi\u1ec3u, b\u00e0i Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n t\u00ecm hi\u1ec3u t\u1eebng b\u01b0\u1edbc v\u1eefng ch\u1eafc, nhanh ch\u00f3ng l\u00e0m quen v\u1edbi c\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 b\u1eaft \u0111\u1ea7u th\u1ef1c h\u00e0nh Kubernetes c\u01a1 b\u1ea3n.\u00a0<\/em><\/strong><\/p>\n\n\n\n<p>\u0110\u1ecdc b\u00e0i vi\u1ebft sau \u0111\u1ec3 bi\u1ebft th\u00eam v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gi\u1edbi thi\u1ec7u v\u1ec1 Kubernetes\u00a0<\/li>\n\n\n\n<li>C\u00e1c th\u00e0nh ph\u1ea7n ch\u00ednh trong Kubernetes<\/li>\n\n\n\n<li>Kubernetes tutorial d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u<\/li>\n\n\n\n<li>Th\u1ef1c h\u00e0nh deploy \u1ee9ng d\u1ee5ng \u0111\u1ea7u ti\u00ean tr\u00ean Kubernetes<\/li>\n\n\n\n<li>C\u00e1c kh\u00e1i ni\u1ec7m n\u00e2ng cao c\u1ee7a Kubernetes n\u00ean bi\u1ebft<\/li>\n\n\n\n<li>C\u00e1c l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi Kubernetes v\u00e0 c\u00e1ch kh\u1eafc ph\u1ee5c<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-quan-v\u1ec1-kubernetes\"><span class=\"ez-toc-section\" id=\"Tong_quan_ve_Kubernetes\"><\/span><strong>T\u1ed5ng quan v\u1ec1 Kubernetes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Kubernetes l\u00e0 m\u1ed9t n\u1ec1n t\u1ea3ng m\u00e3 ngu\u1ed3n m\u1edf \u0111\u01b0\u1ee3c ph\u00e1t tri\u1ec3n b\u1edfi Google v\u00e0 hi\u1ec7n \u0111\u01b0\u1ee3c duy tr\u00ec b\u1edfi Cloud Native Computing Foundation (CNCF). N\u00f3 \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c tri\u1ec3n khai, m\u1edf r\u1ed9ng v\u00e0 qu\u1ea3n l\u00fd c\u00e1c \u1ee9ng d\u1ee5ng ch\u1ea1y trong container. C\u00f4ng c\u1ee5 n\u00e0y gi\u00fap c\u00e1c nh\u00e0 ph\u00e1t tri\u1ec3n v\u00e0 qu\u1ea3n tr\u1ecb vi\u00ean d\u1ec5 d\u00e0ng ki\u1ec3m so\u00e1t h\u1ea1 t\u1ea7ng ph\u1ee9c t\u1ea1p, t\u1eeb m\u00f4i tr\u01b0\u1eddng c\u1ee5c b\u1ed9 cho \u0111\u1ebfn c\u00e1c h\u1ec7 th\u1ed1ng \u0111\u00e1m m\u00e2y l\u1edbn.<\/p>\n\n\n\n<p><strong>M\u1ed9t s\u1ed1 \u0111i\u1ec3m m\u1ea1nh c\u1ee7a Kubernetes:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u0110i\u1ec1u ph\u1ed1i th\u00f4ng minh d\u1ef1a tr\u00ean m\u00f4 h\u00ecnh khai b\u00e1o (declarative model).<\/strong> Ng\u01b0\u1eddi d\u00f9ng ch\u1ec9 c\u1ea7n khai b\u00e1o tr\u1ea1ng th\u00e1i mong mu\u1ed1n c\u1ee7a h\u1ec7 th\u1ed1ng, ch\u1eb3ng h\u1ea1n nh\u01b0 s\u1ed1 l\u01b0\u1ee3ng b\u1ea3n sao \u1ee9ng d\u1ee5ng (replicas), dung l\u01b0\u1ee3ng t\u00e0i nguy\u00ean ho\u1eb7c c\u1ea5u h\u00ecnh m\u1ea1ng, v\u00e0 Kubernetes s\u1ebd t\u1ef1 \u0111\u1ed9ng duy tr\u00ec tr\u1ea1ng th\u00e1i \u0111\u00f3 th\u00f4ng qua control loop li\u00ean t\u1ee5c. N\u1ebfu m\u1ed9t container ho\u1eb7c pod g\u1eb7p s\u1ef1 c\u1ed1, Kubernetes s\u1ebd t\u1ef1 \u0111\u1ed9ng kh\u1edfi \u0111\u1ed9ng l\u1ea1i ho\u1eb7c thay th\u1ebf n\u00f3, \u0111\u1ea3m b\u1ea3o \u1ee9ng d\u1ee5ng lu\u00f4n ho\u1ea1t \u0111\u1ed9ng \u1ed5n \u0111\u1ecbnh.<\/li>\n\n\n\n<li><strong>H\u1ed7 tr\u1ee3 c\u00e2n b\u1eb1ng t\u1ea3i (load balancing), t\u1ef1 ph\u1ee5c h\u1ed3i (self-healing), ph\u00e2n b\u1ed5 t\u00e0i nguy\u00ean linh ho\u1ea1t (resource management)<\/strong>, <strong>v\u00e0 m\u1edf r\u1ed9ng quy m\u00f4 (scaling) theo nhu c\u1ea7u th\u1ef1c t\u1ebf<\/strong>. Nh\u1edd \u0111\u00f3, c\u00e1c nh\u00f3m ph\u00e1t tri\u1ec3n c\u00f3 th\u1ec3 t\u1eadp trung v\u00e0o vi\u1ec7c vi\u1ebft m\u00e3 v\u00e0 c\u1ea3i ti\u1ebfn s\u1ea3n ph\u1ea9m thay v\u00ec ph\u1ea3i lo l\u1eafng v\u1ec1 h\u1ea1 t\u1ea7ng v\u1eadn h\u00e0nh ph\u00eda sau.<\/li>\n<\/ul>\n\n\n\n<p>B\u00e0i tutorial d\u01b0\u1edbi \u0111\u00e2y s\u1ebd cung c\u1ea5p cho b\u1ea1n m\u1ed9t l\u1ed9 tr\u00ecnh \u0111\u01a1n gi\u1ea3n nh\u01b0ng hi\u1ec7u qu\u1ea3 \u0111\u1ec3 nhanh ch\u00f3ng hi\u1ec3u c\u00e1ch s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 n\u00e0y.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/kubernetes-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kubernetes l\u00e0 g\u00ec: To\u00e0n di\u1ec7n ki\u1ebfn th\u1ee9c Kubernetes n\u1ec1n t\u1ea3ng c\u1ea7n bi\u1ebft<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-chu\u1ea9n-b\u1ecb-moi-tr\u01b0\u1eddng-d\u1ec3-s\u1eed-d\u1ee5ng-kubernetes\"><span class=\"ez-toc-section\" id=\"Chuan_bi_moi_truong_de_su_dung_Kubernetes\"><\/span><strong>Chu\u1ea9n b\u1ecb m\u00f4i tr\u01b0\u1eddng \u0111\u1ec3 s\u1eed d\u1ee5ng Kubernetes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C\u00e0i \u0111\u1eb7t m\u1ed9t cluster nh\u1ecf: B\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng c\u00f4ng c\u1ee5 nh\u01b0 Minikube ho\u1eb7c Kind \u0111\u1ec3 t\u1ea1o m\u1ed9t m\u00f4i tr\u01b0\u1eddng th\u1eed nghi\u1ec7m tr\u00ean m\u00e1y c\u00e1 nh\u00e2n.<\/li>\n\n\n\n<li>C\u00e0i \u0111\u1eb7t c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh kubectl: \u0110\u00e2y l\u00e0 chi\u1ebfc \u201cc\u1ea7u n\u1ed1i\u201d gi\u00fap b\u1ea1n t\u01b0\u01a1ng t\u00e1c v\u1edbi Kubernetes.<\/li>\n\n\n\n<li>Hi\u1ec3u v\u1ec1 container v\u00e0 image: Kubernetes kh\u00f4ng t\u1ea1o container, m\u00e0 \u0111i\u1ec1u ph\u1ed1i ch\u00fang. V\u00ec v\u1eady, b\u1ea1n c\u1ea7n n\u1eafm c\u01a1 b\u1ea3n v\u1ec1 Docker ho\u1eb7c c\u00e1c c\u00f4ng c\u1ee5 t\u01b0\u01a1ng t\u1ef1 tr\u01b0\u1edbc khi l\u00e0m theo m\u1ed9t Kubernetes tutorial n\u00e0o \u0111\u00f3.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-khai-ni\u1ec7m-va-thanh-ph\u1ea7n-chinh-trong-kubernetes\"><span class=\"ez-toc-section\" id=\"Cac_khai_niem_va_thanh_phan_chinh_trong_Kubernetes\"><\/span><strong>C\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 th\u00e0nh ph\u1ea7n ch\u00ednh trong Kubernetes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u0110\u1ec3 \u00e1p d\u1ee5ng Kubernetes tutorial hi\u1ec7u qu\u1ea3, b\u1ea1n c\u1ea7n hi\u1ec3u h\u1ec7 th\u1ed1ng n\u00e0y \u0111\u01b0\u1ee3c c\u1ea5u t\u1ea1o nh\u01b0 th\u1ebf n\u00e0o v\u00e0 nh\u1eefng kh\u00e1i ni\u1ec7m c\u1ed1t l\u00f5i b\u1ea1n s\u1ebd l\u00e0m vi\u1ec7c h\u1eb1ng ng\u00e0y.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cac-thanh-ph\u1ea7n-chinh-trong-kubernetes\"><strong>C\u00e1c th\u00e0nh ph\u1ea7n ch\u00ednh trong Kubernetes<\/strong><\/h3>\n\n\n\n<p>M\u1ed9t cluster Kubernetes th\u01b0\u1eddng \u0111\u01b0\u1ee3c chia th\u00e0nh hai nh\u00f3m l\u1edbn: Control Plane (m\u1eb7t \u0111i\u1ec1u khi\u1ec3n) v\u00e0 Node (m\u00e1y ch\u1ee7 th\u1ef1c thi), c\u00f9ng v\u1edbi m\u1ed9t s\u1ed1 th\u00e0nh ph\u1ea7n ph\u1ee5 tr\u1ee3 m\u1edf r\u1ed9ng.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-control-plane-m\u1eb7t-di\u1ec1u-khi\u1ec3n\"><strong>Control Plane (m\u1eb7t \u0111i\u1ec1u khi\u1ec3n)<\/strong><\/h4>\n\n\n\n<p>\u0110\u00e2y l\u00e0 b\u1ed9 n\u00e3o c\u1ee7a cluster: n\u01a1i \u0111\u01b0a ra quy\u1ebft \u0111\u1ecbnh, l\u1eadp k\u1ebf ho\u1ea1ch v\u00e0 duy tr\u00ec tr\u1ea1ng th\u00e1i h\u1ec7 th\u1ed1ng \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o m\u1ecdi th\u1ee9 ho\u1ea1t \u0111\u1ed9ng nh\u01b0 mong mu\u1ed1n. C\u00e1c th\u00e0nh ph\u1ea7n ch\u00ednh g\u1ed3m:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>kube-apiserver:<\/strong> Ch\u1ecbu tr\u00e1ch nhi\u1ec7m ti\u1ebfp nh\u1eadn t\u1ea5t c\u1ea3 y\u00eau c\u1ea7u RESTful API t\u1eeb ng\u01b0\u1eddi d\u00f9ng v\u00e0 c\u00e1c th\u00e0nh ph\u1ea7n kh\u00e1c, \u0111\u00f3ng vai tr\u00f2 l\u00e0 c\u1ed5ng truy c\u1eadp ch\u00ednh c\u1ee7a cluster v\u00e0 l\u00e0 th\u00e0nh ph\u1ea7n duy nh\u1ea5t t\u01b0\u01a1ng t\u00e1c tr\u1ef1c ti\u1ebfp v\u1edbi etcd.<\/li>\n\n\n\n<li><strong>etcd:<\/strong> Kho d\u1eef li\u1ec7u d\u1ea1ng kh\u00f3a-gi\u00e1 tr\u1ecb ph\u00e2n t\u00e1n (distributed key-value store), l\u01b0u to\u00e0n b\u1ed9 c\u1ea5u h\u00ecnh v\u00e0 tr\u1ea1ng th\u00e1i hi\u1ec7n t\u1ea1i (current state) c\u1ee7a cluster, \u0111\u01b0\u1ee3c thi\u1ebft k\u1ebf v\u1edbi kh\u1ea3 n\u0103ng s\u1eb5n s\u00e0ng cao (high availability) v\u00e0 \u0111\u1ed3ng nh\u1ea5t d\u1eef li\u1ec7u (consistency).<\/li>\n\n\n\n<li><strong>kube-scheduler:<\/strong> Ph\u00e2n c\u00f4ng c\u00e1c Pod ch\u01b0a \u0111\u01b0\u1ee3c g\u00e1n l\u00ean m\u1ed9t node ph\u00f9 h\u1ee3p d\u1ef1a tr\u00ean y\u00eau c\u1ea7u t\u00e0i nguy\u00ean, r\u00e0ng bu\u1ed9c (constraints), ch\u00ednh s\u00e1ch \u01b0u ti\u00ean (affinity\/anti-affinity), v\u1ecb tr\u00ed d\u1eef li\u1ec7u (data locality) v\u00e0 quy t\u1eafc l\u1eadp l\u1ecbch (scheduling policies).<\/li>\n\n\n\n<li><strong>kube-controller-manager:<\/strong> Ch\u1ea1y c\u00e1c controller theo v\u00f2ng l\u1eb7p (control loops) \u0111\u1ec3 duy tr\u00ec tr\u1ea1ng th\u00e1i mong mu\u1ed1n. V\u00ed d\u1ee5:\n<ul class=\"wp-block-list\">\n<li>Replication Controller: \u0111\u1ea3m b\u1ea3o s\u1ed1 l\u01b0\u1ee3ng b\u1ea3n sao (replica) c\u1ee7a \u1ee9ng d\u1ee5ng lu\u00f4n \u0111\u00fang.<\/li>\n\n\n\n<li>Node Controller: gi\u00e1m s\u00e1t t\u00ecnh tr\u1ea1ng c\u1ee7a c\u00e1c node.<\/li>\n\n\n\n<li>Endpoint Controller: qu\u1ea3n l\u00fd danh s\u00e1ch Service endpoints.<\/li>\n\n\n\n<li>Service Account &amp; Token Controller: qu\u1ea3n l\u00fd t\u00e0i kho\u1ea3n d\u1ecbch v\u1ee5 v\u00e0 token truy c\u1eadp.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>cloud-controller-manager (n\u1ebfu s\u1eed d\u1ee5ng cloud provider):<\/strong> Cho ph\u00e9p Kubernetes t\u01b0\u01a1ng t\u00e1c v\u1edbi d\u1ecbch v\u1ee5 c\u1ee7a nh\u00e0 cung c\u1ea5p \u0111\u00e1m m\u00e2y, x\u1eed l\u00fd c\u00e1c c\u00f4ng vi\u1ec7c ph\u1ee5 thu\u1ed9c \u0111\u00e1m m\u00e2y nh\u01b0 t\u1ef1 \u0111\u1ed9ng t\u1ea1o LoadBalancer, qu\u1ea3n l\u00fd storage, node lifecycle tr\u00ean cloud<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"h-node-worker-node-may-ch\u1ee7-th\u1ef1c-thi\"><strong>Node (Worker Node \u2014 m\u00e1y ch\u1ee7 th\u1ef1c thi)<\/strong><\/h4>\n\n\n\n<p>\u0110\u00e2y l\u00e0 n\u01a1i c\u00e1c \u1ee9ng d\u1ee5ng th\u1ef1c s\u1ef1 ch\u1ea1y. Node ch\u1ee9a container, Pod v\u00e0 m\u1ecdi th\u1ee9 \u0111\u1ec3 x\u1eed l\u00fd workload. Tr\u00ean m\u1ed7i node th\u01b0\u1eddng c\u00f3 c\u00e1c th\u00e0nh ph\u1ea7n sau:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>kubelet:<\/strong> Agent ch\u1ea1y tr\u00ean m\u1ed7i node, \u0111\u1ea3m b\u1ea3o c\u00e1c Pod v\u00e0 container \u0111ang ho\u1ea1t \u0111\u1ed9ng \u0111\u00fang theo m\u00f4 t\u1ea3 v\u00e0 li\u00ean t\u1ee5c b\u00e1o c\u00e1o v\u1edbi Control Plane.<\/li>\n\n\n\n<li><strong>kube-proxy:<\/strong> Qu\u1ea3n l\u00fd m\u1ea1ng v\u00e0 lu\u1eadt \u0111\u1ecbnh tuy\u1ebfn \u0111\u1ec3 gi\u00fap c\u00e1c Service v\u00e0 Pod giao ti\u1ebfp v\u1edbi nhau ho\u1eb7c v\u1edbi b\u00ean ngo\u00e0i cluster.<\/li>\n\n\n\n<li><strong>Container runtime:<\/strong> Ph\u1ea7n m\u1ec1m ch\u1ecbu tr\u00e1ch nhi\u1ec7m ch\u1ea1y container (v\u00ed d\u1ee5 Docker, containerd\u2026). Node c\u1ea7n m\u1ed9t runtime \u0111\u1ec3 h\u1ed7 tr\u1ee3 ch\u1ea1y c\u00e1c container th\u1ef1c t\u1ebf.<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/kubernetes-architecture-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kubernetes architecture: T\u00ecm hi\u1ec3u t\u1ed5ng quan A-Z cho ng\u01b0\u1eddi m\u1edbi<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-add-ons-amp-thanh-ph\u1ea7n-m\u1edf-r\u1ed9ng\"><strong>Add-ons &amp; Th\u00e0nh ph\u1ea7n m\u1edf r\u1ed9ng<\/strong><\/h3>\n\n\n\n<p>Ngo\u00e0i hai nh\u00f3m ch\u00ednh tr\u00ean, m\u1ed9t cluster Kubernetes th\u01b0\u1eddng k\u1ebft h\u1ee3p th\u00eam c\u00e1c add-on \u0111\u1ec3 m\u1edf r\u1ed9ng t\u00ednh n\u0103ng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>DNS n\u1ed9i b\u1ed9 cho cluster, gi\u00fap t\u00ean d\u1ecbch v\u1ee5 ho\u1ea1t \u0111\u1ed9ng.<\/li>\n\n\n\n<li>Dashboard\/Web UI \u0111\u1ec3 qu\u1ea3n l\u00fd th\u00f4ng qua giao di\u1ec7n ng\u01b0\u1eddi d\u00f9ng.<\/li>\n\n\n\n<li>Monitoring, logging c\u1ea5p cluster (v\u00ed d\u1ee5: thu th\u1eadp metrics, l\u01b0u tr\u1eef log) \u0111\u1ec3 theo d\u00f5i s\u1ee9c kh\u1ecfe \u1ee9ng d\u1ee5ng v\u00e0 h\u1ea1 t\u1ea7ng.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cac-khai-ni\u1ec7m-th\u1ef1c-hanh-c\u01a1-b\u1ea3n\"><strong>C\u00e1c kh\u00e1i ni\u1ec7m th\u1ef1c h\u00e0nh c\u01a1 b\u1ea3n<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pod: \u0111\u01a1n v\u1ecb nh\u1ecf nh\u1ea5t b\u1ea1n s\u1ebd thao t\u00e1c trong Kubernetes.<\/li>\n\n\n\n<li>Service: c\u00e1ch k\u1ebft n\u1ed1i v\u00e0 truy c\u1eadp \u1ee9ng d\u1ee5ng b\u00ean trong v\u00e0 b\u00ean ngo\u00e0i cluster.<\/li>\n\n\n\n<li>Deployment: c\u00e1ch b\u1ea1n khai b\u00e1o \u201ctr\u1ea1ng th\u00e1i mong mu\u1ed1n\u201d v\u1edbi Kubernetes v\u00e0 \u0111\u1ec3 h\u1ec7 th\u1ed1ng duy tr\u00ec tr\u1ea1ng th\u00e1i \u0111\u00f3.<\/li>\n\n\n\n<li>C\u00e1c l\u1ec7nh c\u01a1 b\u1ea3n: kubectl apply, kubectl get pods, kubectl scale, kubectl logs,&#8230; gi\u00fap b\u1ea1n t\u01b0\u01a1ng t\u00e1c v\u1edbi cluster.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-cac-b\u01b0\u1edbc-t\u1ea1o-\u1ee9ng-d\u1ee5ng-m\u1eabu-nbsp\"><strong>C\u00e1c b\u01b0\u1edbc t\u1ea1o \u1ee9ng d\u1ee5ng m\u1eabu&nbsp;<\/strong><\/h3>\n\n\n\n<p>B\u00e2y gi\u1edd, h\u00e3y th\u1eed \u00e1p d\u1ee5ng nh\u1eefng g\u00ec b\u1ea1n \u0111\u00e3 h\u1ecdc b\u1eb1ng c\u00e1ch t\u1ea1o v\u00e0 tri\u1ec3n khai m\u1ed9t \u1ee9ng d\u1ee5ng m\u1eabu \u0111\u1ec3 hi\u1ec3u r\u00f5 c\u00e1ch Kubernetes v\u1eadn h\u00e0nh trong th\u1ef1c t\u1ebf.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>T\u1ea1o \u1ee9ng d\u1ee5ng m\u1eabu \u0111\u01a1n gi\u1ea3n, ch\u1eb3ng h\u1ea1n Nginx, v\u00e0 tri\u1ec3n khai n\u00f3 l\u00ean cluster.<\/li>\n\n\n\n<li>Expose \u1ee9ng d\u1ee5ng ra b\u00ean ngo\u00e0i: T\u1ea1o m\u1ed9t Service \u0111\u1ec3 m\u1edf c\u1ed5ng truy c\u1eadp, cho ph\u00e9p b\u1ea1n th\u1eed nghi\u1ec7m \u1ee9ng d\u1ee5ng tr\u1ef1c ti\u1ebfp t\u1eeb tr\u00ecnh duy\u1ec7t ho\u1eb7c Postman.<\/li>\n\n\n\n<li>Th\u1eed scale \u1ee9ng d\u1ee5ng l\u00ean nhi\u1ec1u b\u1ea3n sao v\u00e0 quan s\u00e1t c\u00e1ch Kubernetes ph\u00e2n ph\u1ed1i t\u1ea3i.<\/li>\n\n\n\n<li>Th\u1eed c\u1eadp nh\u1eadt phi\u00ean b\u1ea3n \u1ee9ng d\u1ee5ng (rolling update) v\u00e0 xem c\u00e1ch Kubernetes qu\u1ea3n l\u00fd vi\u1ec7c chuy\u1ec3n \u0111\u1ed5i. Vi\u1ec7c \u201ckh\u1edfi \u0111\u1ed9ng l\u1ea1i \u1ee9ng d\u1ee5ng khi c\u1ea7n\u201d v\u00e0 \u201cm\u1edf r\u1ed9ng khi c\u00f3 nhu c\u1ea7u\u201d l\u00e0 \u0111i\u1ec3m n\u1ed5i b\u1eadt c\u1ee7a Kubernetes so v\u1edbi vi\u1ec7c ch\u1ec9 ch\u1ea1y container th\u1ee7 c\u00f4ng.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-tim-hi\u1ec3u-cac-tinh-nang-nang-cao-nbsp\"><span class=\"ez-toc-section\" id=\"Tim_hieu_cac_tinh_nang_nang_cao\"><\/span><strong>T\u00ecm hi\u1ec3u c\u00e1c t\u00ednh n\u0103ng n\u00e2ng cao&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Khi b\u1ea1n \u0111\u00e3 ho\u00e0n th\u00e0nh c\u00e1c b\u01b0\u1edbc c\u01a1 b\u1ea3n, h\u00e3y m\u1edf r\u1ed9ng g\u00f3c nh\u00ecn sang m\u00f4i tr\u01b0\u1eddng th\u1ef1c t\u1ebf h\u01a1n, n\u01a1i nhi\u1ec1u node, nhi\u1ec1u service v\u00e0 m\u1ea1ng ph\u1ee9c t\u1ea1p c\u00f9ng ho\u1ea1t \u0111\u1ed9ng. Khi \u0111\u00f3, b\u1ea1n c\u00f3 th\u1ec3 ti\u1ebfp t\u1ee5c t\u00ecm hi\u1ec3u c\u00e1c ch\u1ee7 \u0111\u1ec1 n\u00e2ng cao v\u1eadn h\u00e0nh v\u00e0 t\u1ed1i \u01b0u ho\u00e1 cluster Kubernetes trong th\u1ef1c t\u1ebf.<\/p>\n\n\n\n<p>C\u00e1c t\u00ednh n\u0103ng n\u00e2ng cao c\u1ee7a Kubernetes n\u00ean bi\u1ebft:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-m\u1ea1ng-amp-ingress\"><strong>M\u1ea1ng &amp; Ingress<\/strong><\/h3>\n\n\n\n<p>Kubernetes cung c\u1ea5p kh\u1ea3 n\u0103ng m\u1ea1ng ph\u1ee9c t\u1ea1p h\u01a1n nhi\u1ec1u so v\u1edbi ch\u1ec9 ch\u1ea1y container \u0111\u01a1n l\u1ebb. B\u1ea1n s\u1ebd h\u1ecdc v\u1ec1:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>K\u1ebft n\u1ed1i gi\u1eefa Pod v\u1edbi Pod: <\/strong>M\u1ed7i Pod c\u00f3 \u0111\u1ecba ch\u1ec9 IP ri\u00eang, v\u00e0 c\u00e1c Pod c\u00f3 th\u1ec3 k\u1ebft n\u1ed1i qua plugin giao di\u1ec7n m\u1ea1ng container (CNI &#8211; Container Network Interface) nh\u01b0 Calico, Flannel, Weave Net, Cilium.<\/li>\n\n\n\n<li><strong>Service v\u00e0 Network Policy:<\/strong> Khi c\u00e1c Pod thay \u0111\u1ed5i \u0111\u1ecba ch\u1ec9 IP ho\u1eb7c \u0111\u01b0\u1ee3c t\u00e1i kh\u1edfi \u0111\u1ed9ng, Service \u0111\u00f3ng vai tr\u00f2 gi\u1eef endpoint \u1ed5n \u0111\u1ecbnh cho truy c\u1eadp v\u00e0 c\u00e2n b\u1eb1ng t\u1ea3i qua ClusterIP, NodePort, LoadBalancer. Network Policy ho\u1ea1t \u0111\u1ed9ng nh\u01b0 t\u01b0\u1eddng l\u1eeda \u1edf layer 3\/4 cho ph\u00e9p ki\u1ec3m so\u00e1t lu\u1ed3ng truy c\u1eadp gi\u1eefa c\u00e1c Pod.<\/li>\n\n\n\n<li><strong>Ingress Controller:<\/strong> c\u00f4ng c\u1ee5 \u0111i\u1ec1u h\u01b0\u1edbng HTTP\/HTTPS t\u1eeb b\u00ean ngo\u00e0i v\u00e0o b\u00ean trong cluster v\u1edbi tinh n\u0103ng nh\u01b0:\n<ul class=\"wp-block-list\">\n<li><strong>SSL termination<\/strong> \u2013 ch\u1ea5m d\u1ee9t m\u00e3 h\u00f3a SSL\/TLS \u1edf c\u1ea5p Ingress \u0111\u1ec3 gi\u1ea3m t\u1ea3i cho \u1ee9ng d\u1ee5ng.<\/li>\n\n\n\n<li><strong>Name-based virtual hosting<\/strong> \u2013 \u0111\u1ecbnh tuy\u1ebfn theo t\u00ean mi\u1ec1n.<\/li>\n\n\n\n<li><strong>Path-based routing<\/strong> \u2013 \u0111\u1ecbnh tuy\u1ebfn theo \u0111\u01b0\u1eddng d\u1eabn URL.<\/li>\n\n\n\n<li>C\u00e1c Ingress Controller ph\u1ed5 bi\u1ebfn: NGINX, Traefik, HAProxy, Istio Gateway.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-l\u01b0u-tr\u1eef-amp-statefulset\"><strong>L\u01b0u tr\u1eef &amp; StatefulSet<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ed1i v\u1edbi nh\u1eefng \u1ee9ng d\u1ee5ng c\u1ea7n gi\u1eef tr\u1ea1ng th\u00e1i (database, file system), Kubernetes c\u00f3 c\u00e1c c\u01a1 ch\u1ebf n\u00e2ng cao nh\u01b0:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Volume v\u00e0 Persistent Volume: <\/strong>Gi\u00fap g\u1eafn k\u1ebft d\u1eef li\u1ec7u b\u00ean ngo\u00e0i Pod, \u0111\u1ea3m b\u1ea3o d\u1eef li\u1ec7u kh\u00f4ng m\u1ea5t khi Pod b\u1ecb xo\u00e1 ho\u1eb7c t\u00e1i t\u1ea1o. C\u00f3 nhi\u1ec1u lo\u1ea1i volume kh\u00e1c nhau: emptyDir, hostPath, configMap, secret, v\u00e0 persistent volume v\u1edbi c\u00e1c ki\u1ec3u l\u01b0u tr\u1eef (storage class) \u0111a d\u1ea1ng nh\u01b0 NFS, iSCSI, ho\u1eb7c d\u1ecbch v\u1ee5 l\u01b0u tr\u1eef \u0111\u00e1m m\u00e2y nh\u01b0 EBS v\u00e0 Azure Disk.<\/li>\n\n\n\n<li><strong>StatefulSet: <\/strong>\u0110\u1ed1i t\u01b0\u1ee3ng \u0111\u1eb7c bi\u1ec7t \u0111\u1ec3 qu\u1ea3n l\u00fd c\u00e1c Pod c\u00f3 tr\u1ea1ng th\u00e1i. M\u1ed7i Pod gi\u1eef \u0111\u01b0\u1ee3c danh t\u00ednh ri\u00eang v\u00e0 li\u00ean k\u1ebft v\u1edbi volume ri\u00eang bi\u1ec7t. H\u1ed7 tr\u1ee3 tri\u1ec3n khai (deployment) v\u00e0 x\u00f3a (deletion) theo th\u1ee9 t\u1ef1.<\/li>\n\n\n\n<li><strong>Storage Classes v\u00e0 Dynamic Provisioning:<\/strong> StorageClass \u0111\u1ecbnh ngh\u0129a ki\u1ec3u l\u01b0u tr\u1eef (storage type) m\u00e0 cluster c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng. C\u01a1 ch\u1ebf Dynamic Provisioning (c\u1ea5p ph\u00e1t \u0111\u1ed9ng) cho ph\u00e9p Kubernetes t\u1ef1 \u0111\u1ed9ng t\u1ea1o Persistent Volume (PV) khi c\u00f3 y\u00eau c\u1ea7u t\u1eeb Persistent Volume Claim (PVC), gi\u00fap ti\u1ebft ki\u1ec7m th\u1eddi gian v\u00e0 gi\u1ea3m thao t\u00e1c th\u1ee7 c\u00f4ng cho qu\u1ea3n tr\u1ecb vi\u00ean.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-qu\u1ea3n-ly-tai-nguyen-amp-l\u1eadp-l\u1ecbch-nang-cao\"><strong>Qu\u1ea3n l\u00fd t\u00e0i nguy\u00ean &amp; L\u1eadp l\u1ecbch n\u00e2ng cao<\/strong><\/h3>\n\n\n\n<p>Khi m\u00f4i tr\u01b0\u1eddng th\u1ef1c s\u1ef1 l\u1edbn v\u00e0 c\u00f3 nhi\u1ec1u node, vi\u1ec7c qu\u1ea3n l\u00fd t\u00e0i nguy\u00ean v\u00e0 scheduling hi\u1ec7u qu\u1ea3 l\u00e0 r\u1ea5t quan tr\u1ecdng. Kubernetes cung c\u1ea5p nhi\u1ec1u c\u01a1 ch\u1ebf tinh ch\u1ec9nh gi\u00fap b\u1ea1n ki\u1ec3m so\u00e1t, ph\u00e2n b\u1ed5 v\u00e0 t\u1ed1i \u01b0u t\u00e0i nguy\u00ean m\u1ed9t c\u00e1ch th\u00f4ng minh:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Resource Requests &amp; Limits: X\u00e1c \u0111\u1ecbnh m\u1ee9c t\u1ed1i thi\u1ec3u v\u00e0 t\u1ed1i \u0111a CPU\/RAM cho container \u0111\u1ec3 tr\u00e1nh qu\u00e1 t\u1ea3i ho\u1eb7c l\u00e3ng ph\u00ed t\u00e0i nguy\u00ean.<\/li>\n\n\n\n<li>Affinity \/ Anti-Affinity (Node Affinity): X\u00e1c \u0111\u1ecbnh c\u00e1c quy t\u1eafc \u0111\u1ec3 Pods ch\u1ea1y tr\u00ean node ph\u00f9 h\u1ee3p ho\u1eb7c tr\u00e1nh node kh\u00f4ng ph\u00f9 h\u1ee3p.<\/li>\n\n\n\n<li>Taints &amp; Tolerations: D\u00f9ng \u0111\u1ec3 ng\u0103n pods kh\u00f4ng ph\u00f9 h\u1ee3p ch\u1ea1y tr\u00ean node b\u1ecb g\u1eafn \u201ctaint\u201d.<\/li>\n\n\n\n<li>Priority Classes v\u00e0 Preemption: X\u00e1c \u0111\u1ecbnh \u0111\u1ed9 \u01b0u ti\u00ean c\u1ee7a c\u00e1c pod, cho ph\u00e9p lo\u1ea1i b\u1ecf (evict) nh\u1eefng pod c\u00f3 m\u1ee9c \u01b0u ti\u00ean th\u1ea5p khi c\u1ea7n t\u00e0i nguy\u00ean cho c\u00e1c pod c\u00f3 \u01b0u ti\u00ean cao h\u01a1n.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-t\u1ef1-d\u1ed9ng-m\u1edf-r\u1ed9ng-scaling-amp-kh\u1ea3-nang-cao-s\u1eb5n-sang-high-availability\"><strong>T\u1ef1 \u0111\u1ed9ng m\u1edf r\u1ed9ng (Scaling) &amp; Kh\u1ea3 n\u0103ng cao s\u1eb5n s\u00e0ng (High Availability)<\/strong><\/h3>\n\n\n\n<p>\u0110\u1ec3 t\u1ed1i \u01b0u s\u1ee9c m\u1ea1nh c\u1ee7a Kubernetes, b\u1ea1n c\u1ea7n bi\u1ebft c\u00e1ch l\u00e0m ch\u1ee7 c\u00e1c c\u01a1 ch\u1ebf t\u1ef1 \u0111\u1ed9ng m\u1edf r\u1ed9ng (auto-scaling) v\u00e0 duy tr\u00ec high availability (HA) trong h\u1ec7 th\u1ed1ng.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Horizontal Pod Autoscaler: T\u1ef1 \u0111\u1ed9ng t\u0103ng\/gi\u1ea3m s\u1ed1 l\u01b0\u1ee3ng Pod d\u1ef1a tr\u00ean metric nh\u01b0 CPU\/RAM.<\/li>\n\n\n\n<li>Vertical Pod Autoscaler (VPA): T\u1ef1 \u0111\u1ed9ng \u0111i\u1ec1u ch\u1ec9nh resource requests\/limits c\u1ee7a containers d\u1ef1a tr\u00ean usage patterns.<\/li>\n\n\n\n<li>Cluster Autoscaler: T\u1ef1 \u0111\u1ed9ng \u0111i\u1ec1u ch\u1ec9nh s\u1ed1 l\u01b0\u1ee3ng node trong cluster khi workload t\u0103ng ho\u1eb7c gi\u1ea3m.<\/li>\n\n\n\n<li>Pod Disruption Budgets (PDB): \u0110\u1ea3m b\u1ea3o s\u1ed1 l\u01b0\u1ee3ng t\u1ed1i thi\u1ec3u c\u00e1c pod v\u1eabn ho\u1ea1t \u0111\u1ed9ng trong nh\u1eefng gi\u00e1n \u0111o\u1ea1n t\u1ef1 nguy\u1ec7n (nh\u01b0 khi c\u1eadp nh\u1eadt ho\u1eb7c drain node).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-m\u1edf-r\u1ed9ng-amp-tich-h\u1ee3p-custom-resources-amp-operators\"><strong>M\u1edf r\u1ed9ng &amp; T\u00edch h\u1ee3p (Custom Resources &amp; Operators)<\/strong><\/h3>\n\n\n\n<p>Kubernetes kh\u00f4ng ch\u1ec9 b\u00f3 h\u1eb9p trong c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng c\u00f3 s\u1eb5n, m\u00e0 b\u1ea1n ho\u00e0n to\u00e0n c\u00f3 th\u1ec3 m\u1edf r\u1ed9ng h\u1ec7 th\u1ed1ng \u0111\u1ec3 \u0111\u00e1p \u1ee9ng nhu c\u1ea7u ri\u00eang c\u1ee7a \u1ee9ng d\u1ee5ng b\u1eb1ng c\u00e1c t\u00ednh n\u0103ng:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Custom Resource Definitions (CRDs): C\u00f3 th\u1ec3 \u0111\u1ecbnh ngh\u0129a c\u00e1c lo\u1ea1i object ri\u00eang cho ph\u1ea7n m\u1ec1m c\u1ee7a b\u1ea1n.<\/li>\n\n\n\n<li>Operators: Ch\u01b0\u01a1ng tr\u00ecnh t\u1ef1 \u0111\u1ed9ng h\u00f3a d\u00f9ng CRDs \u0111\u1ec3 qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng ho\u1eb7c t\u00e0i nguy\u00ean ph\u1ee9c t\u1ea1p nh\u01b0 database, Kafka,&#8230;<\/li>\n<\/ul>\n\n\n\n<p>Tuy nhi\u00ean, b\u1ea1n kh\u00f4ng c\u1ea7n h\u1ecdc t\u1ea5t c\u1ea3 ngay l\u1eadp t\u1ee9c. H\u00e3y b\u1eaft \u0111\u1ea7u t\u1eeb nh\u1eefng b\u01b0\u1edbc nh\u1ecf, th\u1ef1c h\u00e0nh \u0111\u1ec1u \u0111\u1eb7n v\u00e0 m\u1edf r\u1ed9ng d\u1ea7n ph\u1ea1m vi hi\u1ec3u bi\u1ebft. H\u00e3y nh\u1edb: <strong>M\u1ee5c ti\u00eau \u0111\u1ea7u ti\u00ean l\u00e0 \u201chi\u1ec3u v\u00e0 ch\u1ea1y \u0111\u01b0\u1ee3c m\u1ed9t \u1ee9ng d\u1ee5ng container tr\u00ean Kubernetes\u201d, r\u1ed3i ti\u1ebfp \u0111\u1ebfn l\u00e0 \u201cqu\u1ea3n l\u00fd, m\u1edf r\u1ed9ng, v\u1eadn h\u00e0nh\u201d.<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-th\u1ef1c-hanh-deploy-\u1ee9ng-d\u1ee5ng-d\u1ea7u-tien-tren-kubernetes\"><span class=\"ez-toc-section\" id=\"Thuc_hanh_deploy_ung_dung_dau_tien_tren_Kubernetes\"><\/span><strong>Th\u1ef1c h\u00e0nh deploy \u1ee9ng d\u1ee5ng \u0111\u1ea7u ti\u00ean tr\u00ean Kubernetes<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ti\u1ebfp theo c\u00f9ng th\u1ef1c h\u00e0nh tri\u1ec3n khai \u1ee9ng d\u1ee5ng \u0111\u1ea7u ti\u00ean v\u1edbi Kubernetes \u2013 t\u1eeb \u0111\u1ecbnh ngh\u0129a \u1ee9ng d\u1ee5ng b\u1eb1ng file YAML, \u0111\u1ebfn khai b\u00e1o Deployment v\u00e0 Service, r\u1ed3i ch\u1ea1y trong cluster.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-1-chu\u1ea9n-b\u1ecb-moi-tr\u01b0\u1eddng\"><strong>1. Chu\u1ea9n b\u1ecb m\u00f4i tr\u01b0\u1eddng<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0110\u1ea3m b\u1ea3o b\u1ea1n \u0111\u00e3 b\u1eadt Kubernetes trong Docker Desktop ho\u1eb7c \u0111\u00e3 k\u1ebft n\u1ed1i v\u1edbi m\u1ed9t cluster Kubernetes \u0111ang ch\u1ea1y.<\/li>\n\n\n\n<li>C\u00e0i \u0111\u1eb7t c\u00f4ng c\u1ee5 d\u00f2ng l\u1ec7nh kubectl v\u00e0 ki\u1ec3m tra k\u1ebft n\u1ed1i b\u1eb1ng kubectl cluster-info v\u00e0 thi\u1ebft l\u1eadp namespace b\u1eb1ng kubectl create namespace &lt;name> ho\u1eb7c context ph\u00f9 h\u1ee3p v\u1edbi kubectl config use-context &lt;context-name> \u0111\u1ec3 thao t\u00e1c v\u1edbi cluster..<\/li>\n\n\n\n<li>Ki\u1ec3m tra kubectl version \u0111\u1ec3 \u0111\u1ea3m b\u1ea3o t\u01b0\u01a1ng th\u00edch: kubectl version &#8211;short<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-2-t\u1ea1o-file-manifest-cho-\u1ee9ng-d\u1ee5ng\"><strong>2. T\u1ea1o file manifest cho \u1ee9ng d\u1ee5ng<\/strong><\/h3>\n\n\n\n<p>T\u1ea1o m\u1ed9t file YAML (v\u00ed d\u1ee5 app-deploy.yaml) m\u00f4 t\u1ea3 c\u00e1c \u0111\u1ed1i t\u01b0\u1ee3ng Kubernetes nh\u01b0 Deployment v\u00e0 Service.<\/p>\n\n\n\n<p>V\u00ed d\u1ee5 c\u1ee5 th\u1ec3 m\u1ed9t file manifest ho\u00e0n ch\u1ec9nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Deployment definition\n\napiVersion: apps\/v1\n\nkind: Deployment\n\nmetadata:\n\n  name: my-app\n\n  labels:\n\n    app: my-app\n\nspec:\n\n  replicas: 3\n\n  selector:\n\n    matchLabels:\n\n      app: my-app\n\n  template:\n\n    metadata:\n\n      labels:\n\n        app: my-app\n\n    spec:\n\n      containers:\n\n      - name: my-app-container\n\n        image: nginx:latest\n\n        ports:\n\n        - containerPort: 80\n\n        resources:\n\n          requests:\n\n            memory: \"64Mi\"\n\n            cpu: \"250m\"\n\n          limits:\n\n            memory: \"128Mi\"\n\n            cpu: \"500m\"\n\n---\n\n# Service definition\n\napiVersion: v1\n\nkind: Service\n\nmetadata:\n\n  name: my-service\n\nspec:\n\n  type: NodePort\n\n  selector:\n\n    app: my-app\n\n  ports:\n\n    - protocol: TCP\n\n      port: 80\n\n      targetPort: 80\n\n      nodePort: 30080<\/code><\/pre>\n\n\n\n<p>L\u01b0u \u00fd: file YAML lu\u00f4n g\u1ed3m c\u00e1c ph\u1ea7n apiVersion, kind, metadata, v\u00e0 spec. YAML r\u1ea5t nh\u1ea1y c\u1ea3m v\u1edbi indentation &#8211; d\u00f9ng spaces, kh\u00f4ng d\u00f9ng tabs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-3-tri\u1ec3n-khai-\u1ee9ng-d\u1ee5ng-vao-cluster\"><strong>3. Tri\u1ec3n khai \u1ee9ng d\u1ee5ng v\u00e0o cluster<\/strong><\/h3>\n\n\n\n<p>Trong terminal, \u0111i\u1ec1u h\u01b0\u1edbng \u0111\u1ebfn th\u01b0 m\u1ee5c ch\u1ee9a file YAML v\u00e0 ch\u1ea1y l\u1ec7nh:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f app-deploy.yaml<\/code><\/pre>\n\n\n\n<p>Khi th\u1ef1c hi\u1ec7n \u0111\u00fang, b\u1ea1n s\u1ebd th\u1ea5y output t\u01b0\u01a1ng t\u1ef1 nh\u01b0:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>deployment.apps\/my-app created\u00a0\u00a0\n\nservice\/my-service created<\/code><\/pre>\n\n\n\n<p>Ho\u1eb7c n\u1ebfu mu\u1ed1n apply v\u00e0o namespace c\u1ee5 th\u1ec3:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl apply -f app-deploy.yaml -n &lt;namespace-name&gt;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-4-ki\u1ec3m-tra-tr\u1ea1ng-thai-tri\u1ec3n-khai\"><strong>4. Ki\u1ec3m tra tr\u1ea1ng th\u00e1i tri\u1ec3n khai<\/strong><\/h3>\n\n\n\n<p>D\u00f9ng l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get deployments\n\nkubectl get pods\n\nkubectl get services<\/code><\/pre>\n\n\n\n<p>Ho\u1eb7c xem t\u1ea5t c\u1ea3 resources c\u00f9ng l\u00fac b\u1eb1ng l\u1ec7nh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl get all<\/code><\/pre>\n\n\n\n<p>\u0110\u1ec3 xem chi ti\u1ebft h\u01a1n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl describe deployment my-app\n\nkubectl describe service my-service<\/code><\/pre>\n\n\n\n<p>Ki\u1ec3m tra xem Deployment \u0111\u00e3 t\u1ea1o \u0111\u1ee7 b\u1ea3n sao Pod ch\u01b0a (c\u1ed9t READY hi\u1ec3n th\u1ecb 3\/3), v\u00e0 Service \u0111\u00e3 \u0111\u01b0\u1ee3c t\u1ea1o v\u1edbi CLUSTER-IP, EXTERNAL-IP (n\u1ebfu c\u00f3) ho\u1eb7c port ph\u00f9 h\u1ee3p.<\/p>\n\n\n\n<p>N\u1ebfu m\u1ecdi th\u1ee9 hi\u1ec3n th\u1ecb 3\/3 trong c\u1ed9t READY ho\u1eb7c t\u01b0\u01a1ng t\u1ef1, ngh\u0129a l\u00e0 \u1ee9ng d\u1ee5ng \u0111\u00e3 ch\u1ea1y th\u00e0nh c\u00f4ng. Status c\u1ee7a Pod ph\u1ea3i l\u00e0 &#8220;Running&#8221;.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-5-truy-c\u1eadp-\u1ee9ng-d\u1ee5ng-va-th\u1eed-nghi\u1ec7m\"><strong>5. Truy c\u1eadp \u1ee9ng d\u1ee5ng v\u00e0 th\u1eed nghi\u1ec7m<\/strong><\/h3>\n\n\n\n<p>N\u1ebfu b\u1ea1n s\u1eed d\u1ee5ng Service lo\u1ea1i NodePort, truy c\u1eadp http:\/\/localhost:&lt;nodePort&gt; t\u1eeb tr\u00ecnh duy\u1ec7t \u0111\u1ec3 xem \u1ee9ng d\u1ee5ng ch\u1ea1y.<\/p>\n\n\n\n<p>V\u1edbi Minikube, d\u00f9ng l\u1ec7nh sau \u0111\u1ec3 m\u1edf browser t\u1ef1 \u0111\u1ed9ng:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>minikube service my-service<\/code><\/pre>\n\n\n\n<p>Ho\u1eb7c d\u00f9ng port-forward \u0111\u1ec3 test local:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl port-forward service\/my-service 8080:80<\/code><\/pre>\n\n\n\n<p>Sau \u0111\u00f3, h\u00e3y quan s\u00e1t c\u00e1ch Kubernetes ph\u00e2n ph\u1ed1i v\u00e0 gi\u1eef cho \u1ee9ng d\u1ee5ng ho\u1ea1t \u0111\u1ed9ng. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 th\u1eed n\u00e2ng c\u1ea5p b\u1ea3n image ho\u1eb7c thay \u0111\u1ed5i s\u1ed1 l\u01b0\u1ee3ng b\u1ea3n sao \u0111\u1ec3 th\u1ef1c h\u00e0nh ti\u1ebfp.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-6-d\u1ecdn-d\u1eb9p-sau-khi-th\u1eed-nghi\u1ec7m\"><strong>6. D\u1ecdn d\u1eb9p sau khi th\u1eed nghi\u1ec7m<\/strong><\/h3>\n\n\n\n<p>Khi b\u1ea1n mu\u1ed1n x\u00f3a \u1ee9ng d\u1ee5ng th\u1eed nghi\u1ec7m, d\u00f9ng l\u1ec7nh sau \u0111\u1ec3 g\u1ee1 Deployment v\u00e0 Service kh\u1ecfi cluster:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete -f app-deploy.yaml<\/code><\/pre>\n\n\n\n<p>Ho\u1eb7c x\u00f3a t\u1eebng resource:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete deployment my-app\n\nkubectl delete service my-service<\/code><\/pre>\n\n\n\n<p>Ho\u1eb7c x\u00f3a t\u1ea5t c\u1ea3 trong namespace:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>kubectl delete all --all -n &lt;namespace-name&gt;<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-kh-\u1eafc-ph\u1ee5c-cac-l\u1ed7i-th\u01b0\u1eddng-g\u1eb7p-khi-lam-vi\u1ec7c-v\u1edbi-kubernetes-nbsp\"><span class=\"ez-toc-section\" id=\"Khac_phuc_cac_loi_thuong_gap_khi_lam_viec_voi_Kubernetes\"><\/span><strong>Kh<\/strong><strong>\u1eafc ph\u1ee5c c\u00e1c<\/strong><strong> l\u1ed7i th\u01b0\u1eddng g\u1eb7p khi l\u00e0m vi\u1ec7c v\u1edbi Kubernetes&nbsp;<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Ph\u1ea7n ti\u1ebfp theo c\u1ee7a Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n hi\u1ec3u v\u00e0 bi\u1ebft c\u00e1ch kh\u1eafc ph\u1ee5c c\u00e1c l\u1ed7i th\u01b0\u1eddng g\u1eb7p \u0111\u1ec3 nhanh th\u00e0nh th\u1ea1o h\u01a1n:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-crashloopbackoff\"><strong>CrashLoopBackOff<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tri\u1ec7u ch\u1ee9ng: Pod li\u00ean t\u1ee5c kh\u1edfi \u0111\u1ed9ng l\u1ea1i, tr\u1ea1ng th\u00e1i b\u00e1o \u201cCrashLoopBackOff\u201d v\u1edbi restart count t\u0103ng d\u1ea7n.<\/li>\n\n\n\n<li>Nguy\u00ean nh\u00e2n ph\u1ed5 bi\u1ebfn: \u1ee8ng d\u1ee5ng crash ngay sau khi kh\u1edfi \u0111\u1ed9ng, command ho\u1eb7c args sai, c\u1ea5u h\u00ecnh probe (liveness\/readiness) sai, ho\u1eb7c thi\u1ebfu t\u00e0i nguy\u00ean.<\/li>\n\n\n\n<li>C\u00e1ch kh\u1eafc ph\u1ee5c:\n<ul class=\"wp-block-list\">\n<li>Ki\u1ec3m tra log c\u1ee7a pod: <code>kubectl logs &lt;pod-name><\/code><\/li>\n\n\n\n<li>D\u00f9ng kubectl describe pod &lt;pod-name> \u0111\u1ec3 xem s\u1ef1 ki\u1ec7n v\u00e0 l\u1ed7i.<\/li>\n\n\n\n<li>\u0110i\u1ec1u ch\u1ec9nh y\u00eau c\u1ea7u t\u00e0i nguy\u00ean (requests\/limits) n\u1ebfu pod b\u1ecb thi\u1ebfu CPU\/RAM.<\/li>\n\n\n\n<li>Ki\u1ec3m tra probe n\u1ebfu c\u00f3, \u0111\u1ea3m b\u1ea3o \u1ee9ng d\u1ee5ng cho ph\u00e9p probe ch\u1ea1y \u0111\u00fang th\u1eddi \u0111i\u1ec3m.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-imagepullbackoff\"><strong>ImagePullBackOff<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tri\u1ec7u ch\u1ee9ng: Pod kh\u00f4ng th\u1ec3 t\u1ea3i image, tr\u1ea1ng th\u00e1i \u201cImagePullBackOff\u201d.<\/li>\n\n\n\n<li>Nguy\u00ean nh\u00e2n ph\u1ed5 bi\u1ebfn: T\u00ean image ho\u1eb7c tag sai, kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp registry, m\u1ea1ng b\u1ecb ch\u1eb7n.<\/li>\n\n\n\n<li>C\u00e1ch kh\u1eafc ph\u1ee5c:\n<ul class=\"wp-block-list\">\n<li>Ki\u1ec3m tra image v\u00e0 tag trong manifest c\u00f3 \u0111\u00fang hay kh\u00f4ng.<\/li>\n\n\n\n<li>N\u1ebfu s\u1eed d\u1ee5ng registry ri\u00eang, \u0111\u1ea3m b\u1ea3o \u0111\u00e3 t\u1ea1o Secret v\u00e0 pod tham chi\u1ebfu \u0111\u00fang.<\/li>\n\n\n\n<li>Ki\u1ec3m tra k\u1ebft n\u1ed1i m\u1ea1ng t\u1eeb node \u0111\u1ebfn registry.<\/li>\n\n\n\n<li>X\u00f3a v\u00e0 t\u00e1i t\u1ea1o pod n\u1ebfu c\u1ea7n.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-exit-code-1\"><strong>Exit Code 1<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tri\u1ec7u ch\u1ee9ng: Container b\u1eaft \u0111\u1ea7u nh\u01b0ng ngay l\u1eadp t\u1ee9c tho\u00e1t v\u1edbi m\u00e3 1.<\/li>\n\n\n\n<li>Nguy\u00ean nh\u00e2n ph\u1ed5 bi\u1ebfn: L\u1ed7i \u1ee9ng d\u1ee5ng, tham chi\u1ebfu file ho\u1eb7c m\u00f4i tr\u01b0\u1eddng kh\u00f4ng t\u1ed3n t\u1ea1i, ho\u1eb7c c\u1ea5u h\u00ecnh sai.<\/li>\n\n\n\n<li>C\u00e1ch kh\u1eafc ph\u1ee5c:\n<ul class=\"wp-block-list\">\n<li>Xem log container \u0111\u1ec3 t\u00ecm message chi ti\u1ebft.<\/li>\n\n\n\n<li>Ki\u1ec3m tra environment variables, tham chi\u1ebfu file, quy\u1ec1n truy c\u1eadp.<\/li>\n\n\n\n<li>Ch\u1ea1y th\u1eed image ngo\u1ea1i tuy\u1ebfn \u0111\u1ec3 ki\u1ec3m tra tr\u01b0\u1edbc khi deploy.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-node-not-ready\"><strong>Node Not Ready<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Tri\u1ec7u ch\u1ee9ng: Node trong cluster b\u1ecb tr\u1ea1ng th\u00e1i \u201cNotReady\u201d, g\u00e2y pods kh\u00f4ng \u0111\u01b0\u1ee3c l\u1ecbch ho\u1eb7c chuy\u1ec3n sang Unknown.<\/li>\n\n\n\n<li>Nguy\u00ean nh\u00e2n ph\u1ed5 bi\u1ebfn: \u00c1p l\u1ef1c \u0111\u0129a (node disk pressure), \u00e1p l\u1ef1c b\u1ed9 nh\u1edb (memory pressure), \u00e1p l\u1ef1c ti\u1ebfn tr\u00ecnh (PID pressure), l\u1ed7i kubelet, s\u1ef1 c\u1ed1 container runtime, ho\u1eb7c v\u1ea5n \u0111\u1ec1 v\u1ec1 m\u1ea1ng n\u1ed9i b\u1ed9 v\u00e0 \u1ed5 \u0111\u0129a qu\u00e1 t\u1ea3i.<\/li>\n\n\n\n<li>C\u00e1ch kh\u1eafc ph\u1ee5c:\n<ul class=\"wp-block-list\">\n<li>D\u00f9ng <code>kubectl get nodes<\/code> v\u00e0 <code>kubectl describe node &lt;node-name><\/code> \u0111\u1ec3 \u0111\u1ec3 ki\u1ec3m tra ph\u1ea7n Conditions.<\/li>\n\n\n\n<li>SSH v\u00e0o node v\u00e0 check: <code>systemctl status kubelet, journalctl -u kubelet<\/code><\/li>\n\n\n\n<li>Ki\u1ec3m tra t\u00e0i nguy\u00ean h\u1ec7 th\u1ed1ng b\u1eb1ng c\u00e1c l\u1ec7nh: df -h, memory: free -h, processes: ps aux | wc -l<\/li>\n\n\n\n<li>Th\u1ef1c hi\u1ec7n drain node \u0111\u1ec3 di chuy\u1ec3n (migrate) c\u00e1c pod sang node kh\u00e1c: <code>kubectl drain &lt;node-name> --ignore-daemonsets<\/code><\/li>\n\n\n\n<li>Kh\u1edfi \u0111\u1ed9ng l\u1ea1i node ho\u1eb7c d\u1ecbch chuy\u1ec3n pods sang node kh\u00e1c.<\/li>\n\n\n\n<li>X\u00f3a node kh\u1ecfi cluster n\u1ebfu n\u00f3 kh\u00f4ng h\u1ed3i ph\u1ee5c.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sai-l\u1ea7m-th\u01b0\u1eddng-g\u1eb7p-khi-s\u1eed-d\u1ee5ng-kubernetes-va-cach-tranh\"><span class=\"ez-toc-section\" id=\"Sai_lam_thuong_gap_khi_su_dung_Kubernetes_va_cach_tranh\"><\/span><strong>Sai l\u1ea7m th\u01b0\u1eddng g\u1eb7p khi s\u1eed d\u1ee5ng Kubernetes v\u00e0 c\u00e1ch tr\u00e1nh<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Khi m\u1edbi l\u00e0m quen v\u1edbi Kubernetes, nhi\u1ec1u ng\u01b0\u1eddi th\u01b0\u1eddng m\u1eafc ph\u1ea3i nh\u1eefng l\u1ed7i c\u01a1 b\u1ea3n khi\u1ebfn vi\u1ec7c v\u1eadn h\u00e0nh v\u00e0 tri\u1ec3n khai tr\u1edf n\u00ean ph\u1ee9c t\u1ea1p h\u01a1n. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 7 sai l\u1ea7m ph\u1ed5 bi\u1ebfn v\u00e0 c\u00e1ch kh\u1eafc ph\u1ee5c hi\u1ec7u qu\u1ea3 nh\u1ea5t.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-khong-thi\u1ebft-l\u1eadp-gi\u1edbi-h\u1ea1n-tai-nguyen-requests-amp-limits\"><strong>Kh\u00f4ng thi\u1ebft l\u1eadp gi\u1edbi h\u1ea1n t\u00e0i nguy\u00ean (Requests &amp; Limits)<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: B\u1ecf qua vi\u1ec7c c\u1ea5u h\u00ecnh requests v\u00e0 limits khi\u1ebfn Pod chi\u1ebfm d\u1ee5ng qu\u00e1 nhi\u1ec1u t\u00e0i nguy\u00ean ho\u1eb7c b\u1ecb scheduler ph\u00e2n ph\u1ed1i sai node, c\u00f3 th\u1ec3 g\u00e2y OOMKilled ho\u1eb7c CPU throttling.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: \u0110\u1eb7t gi\u00e1 tr\u1ecb nh\u1ecf h\u1ee3p l\u00fd (v\u00ed d\u1ee5: CPU 100m, Memory 128Mi), theo d\u00f5i th\u1ef1c t\u1ebf qua metrics r\u1ed3i tinh ch\u1ec9nh d\u1ea7n.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-khong-s\u1eed-d\u1ee5ng-liveness-readiness-probes\"><strong>Kh\u00f4ng s\u1eed d\u1ee5ng liveness\/readiness probes<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: Ch\u1ec9 \u0111\u00e1nh d\u1ea5u container l\u00e0 \u201c\u0111ang ch\u1ea1y\u201d m\u00e0 kh\u00f4ng ki\u1ec3m tra xem \u1ee9ng d\u1ee5ng \u0111\u00e3 s\u1eb5n s\u00e0ng nh\u1eadn request hay ch\u01b0a ho\u1eb7c c\u00f2n ho\u1ea1t \u0111\u1ed9ng b\u00ecnh th\u01b0\u1eddng kh\u00f4ng.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: Th\u00eam livenessProbe v\u00e0 readinessProbe ngay t\u1eeb \u0111\u1ea7u, v\u00ed d\u1ee5 ki\u1ec3m tra endpoint \/healthz ho\u1eb7c \/ready.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-ch\u1ec9-xem-log-c\u1ee5c-b\u1ed9-khong-co-h\u1ec7-th\u1ed1ng-giam-sat-t\u1eadp-trung\"><strong>Ch\u1ec9 xem log c\u1ee5c b\u1ed9, kh\u00f4ng c\u00f3 h\u1ec7 th\u1ed1ng gi\u00e1m s\u00e1t t\u1eadp trung<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: Ch\u1ec9 d\u1ef1a v\u00e0o kubectl logs, khi\u1ebfn log b\u1ecb m\u1ea5t khi Pod xo\u00e1 ho\u1eb7c Node kh\u1edfi \u0111\u1ed9ng l\u1ea1i.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: Thi\u1ebft l\u1eadp h\u1ec7 th\u1ed1ng log aggregation (Fluentd, Loki, ho\u1eb7c Elasticsearch) v\u00e0 gi\u00e1m s\u00e1t metrics b\u1eb1ng Prometheus ho\u1eb7c Grafana.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-dung-chung-c\u1ea5u-hinh-cho-moi-tr\u01b0\u1eddng-dev-va-prod\"><strong>D\u00f9ng chung c\u1ea5u h\u00ecnh cho m\u00f4i tr\u01b0\u1eddng Dev v\u00e0 Prod<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: S\u1eed d\u1ee5ng c\u00f9ng m\u1ed9t file manifest cho c\u1ea3 m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n v\u00e0 s\u1ea3n xu\u1ea5t, d\u1eabn \u0111\u1ebfn scaling v\u00e0 b\u1ea3o m\u1eadt kh\u00f4ng ph\u00f9 h\u1ee3p.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: T\u00e1ch c\u1ea5u h\u00ecnh theo m\u00f4i tr\u01b0\u1eddng b\u1eb1ng Kustomize ho\u1eb7c Helm, \u0111i\u1ec1u ch\u1ec9nh replica, t\u00e0i nguy\u00ean v\u00e0 rule b\u1ea3o m\u1eadt ri\u00eang cho t\u1eebng m\u00f4i tr\u01b0\u1eddng.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-d\u1ec3-l\u1ea1i-tai-nguyen-cu-khong-s\u1eed-d\u1ee5ng-trong-cluster\"><strong>\u0110\u1ec3 l\u1ea1i t\u00e0i nguy\u00ean c\u0169 kh\u00f4ng s\u1eed d\u1ee5ng trong cluster<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: C\u00e1c ConfigMap, Service ho\u1eb7c PVC c\u0169 kh\u00f4ng \u0111\u01b0\u1ee3c x\u00f3a khi\u1ebfn cluster l\u00e3ng ph\u00ed t\u00e0i nguy\u00ean v\u00e0 g\u00e2y kh\u00f3 kh\u0103n trong qu\u1ea3n l\u00fd.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: G\u1eafn nh\u00e3n cho t\u00e0i nguy\u00ean (labels: owner, purpose), \u0111\u1ecbnh k\u1ef3 ki\u1ec3m tra b\u1eb1ng kubectl get all, ho\u1eb7c d\u00f9ng Kyverno \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng d\u1ecdn d\u1eb9p.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-di-qua-sau-vao-networking-ho\u1eb7c-service-mesh-qua-s\u1edbm\"><strong>\u0110i qu\u00e1 s\u00e2u v\u00e0o networking ho\u1eb7c service mesh qu\u00e1 s\u1edbm<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: H\u1ecdc sinh m\u1edbi th\u01b0\u1eddng nh\u1ea3y ngay v\u00e0o Istio, Calico hay multi-cluster m\u00e0 ch\u01b0a n\u1eafm r\u00f5 networking c\u01a1 b\u1ea3n.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh: B\u1eaft \u0111\u1ea7u v\u1edbi m\u00f4 h\u00ecnh \u0111\u01a1n gi\u1ea3n g\u1ed3m Deployment, Service, Ingress, sau \u0111\u00f3 m\u1edbi t\u00ecm hi\u1ec3u service mesh n\u00e2ng cao.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-thi\u1ebfu-b\u1ea3o-m\u1eadt-va-c\u1ea5u-hinh-rbac-h\u1ee3p-ly\"><strong>Thi\u1ebfu b\u1ea3o m\u1eadt v\u00e0 c\u1ea5u h\u00ecnh RBAC h\u1ee3p l\u00fd<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Sai l\u1ea7m: Cho ph\u00e9p quy\u1ec1n qu\u00e1 cao, d\u00f9ng image tag latest ho\u1eb7c container ch\u1ea1y d\u01b0\u1edbi quy\u1ec1n root.<\/li>\n\n\n\n<li>C\u00e1ch tr\u00e1nh:\n<ul class=\"wp-block-list\">\n<li>\u00c1p d\u1ee5ng nguy\u00ean t\u1eafc Least Privilege (\u00edt quy\u1ec1n nh\u1ea5t) khi t\u1ea1o Role\/RoleBinding.<\/li>\n\n\n\n<li>D\u00f9ng image version c\u1ee5 th\u1ec3 thay v\u00ec latest.<\/li>\n\n\n\n<li>B\u1eadt PodSecurityAdmission ho\u1eb7c Kyverno \u0111\u1ec3 enforce policy b\u1ea3o m\u1eadt.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cac-cau-h\u1ecfi-th\u01b0\u1eddng-g\u1eb7p-v\u1ec1-kubernetes-tutorial\"><span class=\"ez-toc-section\" id=\"Cac_cau_hoi_thuong_gap_ve_Kubernetes_tutorial\"><\/span><strong>C\u00e1c c\u00e2u h\u1ecfi th\u01b0\u1eddng g\u1eb7p v\u1ec1 Kubernetes tutorial<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-co-c\u1ea7n-bi\u1ebft-docker-tr\u01b0\u1edbc-khi-h\u1ecdc-kubernetes-khong\"><strong>C\u00f3 c\u1ea7n bi\u1ebft Docker tr\u01b0\u1edbc khi h\u1ecdc Kubernetes kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Tr\u01b0\u1edbc khi b\u1eaft \u0111\u1ea7u v\u1edbi Kubernetes tutorial, vi\u1ec7c bi\u1ebft v\u1ec1 Docker l\u00e0 r\u1ea5t h\u1eefu \u00edch. Docker gi\u00fap b\u1ea1n n\u1eafm \u0111\u01b0\u1ee3c c\u00e1ch t\u1ea1o, ch\u1ea1y v\u00e0 qu\u1ea3n l\u00fd container &#8211; n\u1ec1n t\u1ea3ng m\u00e0 Kubernetes s\u1eed d\u1ee5ng \u0111\u1ec3 tri\u1ec3n khai v\u00e0 m\u1edf r\u1ed9ng \u1ee9ng d\u1ee5ng.\u00a0<\/p>\n\n\n\n<p>H\u00e3y \u0111\u1ea3m b\u1ea3o b\u1ea1n bi\u1ebft: ph\u00e2n bi\u1ec7t Container vs VM, hi\u1ec3u c\u00e1c kh\u00e1i ni\u1ec7m image layers, port mapping, volume mounting, bi\u1ebfn m\u00f4i tr\u01b0\u1eddng (environment variables),&#8230; Sau \u0111\u00f3, chuy\u1ec3n sang Kubernetes \u0111\u1ec3 h\u1ecdc c\u00e1ch tri\u1ec3n khai, m\u1edf r\u1ed9ng v\u00e0 qu\u1ea3n l\u00fd container \u1edf quy m\u00f4 l\u1edbn.&nbsp;<\/p>\n\n\n\n<p>Tuy nhi\u00ean, c\u1ea7n l\u01b0u \u00fd r\u1eb1ng Kubernetes hi\u1ec7n nay c\u00f3 xu h\u01b0\u1edbng s\u1eed d\u1ee5ng containerd thay v\u00ec Docker runtime \u0111\u1ec3 t\u1ed1i \u01b0u hi\u1ec7u n\u0103ng.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/docker-la-gi\/\" target=\"_blank\" rel=\"noreferrer noopener\">Docker l\u00e0 g\u00ec? H\u00e3y \u0111\u1ec3 Senior DevOps Engineer tr\u1ea3 l\u1eddi cho b\u1ea1n!<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-kubernetes-co-th\u1ec3-ch\u1ea1y-tren-windows-hay-khong\"><strong>Kubernetes c\u00f3 th\u1ec3 ch\u1ea1y tr\u00ean Windows hay kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>C\u00e2u tr\u1ea3 l\u1eddi l\u00e0 c\u00f3. Kubernetes h\u1ed7 tr\u1ee3 tri\u1ec3n khai tr\u00ean Windows th\u00f4ng qua c\u00e1c c\u00f4ng c\u1ee5 nh\u01b0 Minikube, Docker Desktop, ho\u1eb7c ch\u1ea1y node Windows trong cluster hybrid. Tuy nhi\u00ean, c\u00e1c Kubernetes tutorial th\u01b0\u1eddng h\u01b0\u1edbng d\u1eabn th\u1ef1c h\u00e0nh trong m\u00f4i tr\u01b0\u1eddng Linux.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-kubernetes-co-th\u1ec3-thay-th\u1ebf-docker-khong\"><strong>Kubernetes c\u00f3 th\u1ec3 thay th\u1ebf Docker kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Kubernetes kh\u00f4ng thay th\u1ebf m\u00e0 b\u1ed5 sung cho Docker, b\u1eb1ng c\u00e1ch qu\u1ea3n l\u00fd, t\u1ef1 \u0111\u1ed9ng h\u00f3a v\u00e0 m\u1edf r\u1ed9ng c\u00e1c container \u0111\u01b0\u1ee3c Docker t\u1ea1o ra. Do \u0111\u00f3, khi \u0111\u1ecdc c\u00e1c Kubernetes tutorial, b\u1ea1n s\u1ebd th\u1ea5y hai c\u00f4ng ngh\u1ec7 n\u00e0y th\u01b0\u1eddng ph\u1ed1i h\u1ee3p ch\u1eb7t ch\u1ebd \u0111\u1ec3 tri\u1ec3n khai \u1ee9ng d\u1ee5ng hi\u1ec7u qu\u1ea3 h\u01a1n.<\/p>\n\n\n\n<p><strong>B\u1ea3ng so s\u00e1nh d\u01b0\u1edbi \u0111\u00e2y s\u1ebd gi\u00fap b\u1ea1n hi\u1ec3u r\u00f5 v\u1ec1 m\u1ed1i quan h\u1ec7 gi\u1eefa Kubernetes vs Docker:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Ti\u00eau ch\u00ed<\/strong><\/td><td><strong>Kubernetes<\/strong><\/td><td><strong>Docker<\/strong><\/td><\/tr><tr><td>Kh\u00e1i ni\u1ec7m ch\u00ednh<\/td><td>H\u1ec7 th\u1ed1ng \u0111i\u1ec1u ph\u1ed1i (orchestration) gi\u00fap qu\u1ea3n l\u00fd v\u00e0 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c ch\u1ea1y container \u1edf quy m\u00f4 l\u1edbn.<\/td><td>Docker Engine l\u00e0 runtime \u0111\u1ec3 ch\u1ea1y container. Docker Platform bao g\u1ed3m c\u00f4ng c\u1ee5 \u0111\u1ec3 build, ship v\u00e0 run \u1ee9ng d\u1ee5ng trong container.<\/td><\/tr><tr><td>M\u1ee5c ti\u00eau s\u1eed d\u1ee5ng<\/td><td>Qu\u1ea3n l\u00fd nhi\u1ec1u container tr\u00ean nhi\u1ec1u m\u00e1y ch\u1ee7 (node) ho\u1eb7c m\u00f4i tr\u01b0\u1eddng cloud trong production.<\/td><td>Build, ship v\u00e0 run container \u0111\u01a1n l\u1ebb ho\u1eb7c nh\u00f3m nh\u1ecf container qua Docker Compose.<\/td><\/tr><tr><td>Ph\u1ea1m vi ho\u1ea1t \u0111\u1ed9ng<\/td><td>Ho\u1ea1t \u0111\u1ed9ng tr\u00ean cluster (c\u1ee5m nhi\u1ec1u m\u00e1y), gi\u00fap \u1ee9ng d\u1ee5ng lu\u00f4n s\u1eb5n s\u00e0ng v\u00e0 m\u1edf r\u1ed9ng linh ho\u1ea1t.<\/td><td>Ho\u1ea1t \u0111\u1ed9ng tr\u00ean t\u1eebng m\u00e1y c\u1ee5c b\u1ed9 ho\u1eb7c m\u00e1y ch\u1ee7 ri\u00eang l\u1ebb. Docker Swarm c\u00f3 th\u1ec3 qu\u1ea3n l\u00fd cluster nh\u01b0ng \u00edt ph\u1ed5 bi\u1ebfn h\u01a1n Kubernetes.<\/td><\/tr><tr><td>Tri\u1ec3n khai \u1ee9ng d\u1ee5ng<\/td><td>T\u1ef1 \u0111\u1ed9ng tri\u1ec3n khai, c\u1eadp nh\u1eadt rolling updates v\u00e0 rollback th\u00f4ng qua Deployment v\u00e0 c\u00e1c resource kh\u00e1c nh\u01b0 StatefulSet, DaemonSet.<\/td><td>Th\u1ef1c hi\u1ec7n th\u1ee7 c\u00f4ng qua docker run ho\u1eb7c d\u00f9ng Docker Compose cho multi-container.<\/td><\/tr><tr><td>Kh\u1ea3 n\u0103ng m\u1edf r\u1ed9ng (scaling)<\/td><td>T\u1ef1 \u0111\u1ed9ng scale d\u1ef1a tr\u00ean t\u00e0i nguy\u00ean ho\u1eb7c t\u1ea3i h\u1ec7 th\u1ed1ng (Horizontal Pod Autoscaler &#8211; HPA, Vertical Pod Autoscaler &#8211; VPA)..<\/td><td>C\u00f3 th\u1ec3 scale container th\u1ee7 c\u00f4ng b\u1eb1ng Docker CLI ho\u1eb7c docker-compose scale.<\/td><\/tr><tr><td>C\u00e2n b\u1eb1ng t\u1ea3i (Load balancing)<\/td><td>T\u00edch h\u1ee3p s\u1eb5n c\u01a1 ch\u1ebf Service gi\u00fap c\u00e2n b\u1eb1ng t\u1ea3i t\u1ef1 \u0111\u1ed9ng gi\u1eefa c\u00e1c Pod qua ClusterIP, NodePort, LoadBalancer, Ingress.<\/td><td>C\u1ea7n thi\u1ebft l\u1eadp th\u1ee7 c\u00f4ng ho\u1eb7c d\u00f9ng c\u00f4ng c\u1ee5 b\u1ed5 sung nh\u01b0 nginx, HAProxy.<\/td><\/tr><tr><td>T\u1ef1 ph\u1ee5c h\u1ed3i (Self-healing)<\/td><td>C\u00f3 kh\u1ea3 n\u0103ng ph\u00e1t hi\u1ec7n l\u1ed7i qua liveness\/readiness probes v\u00e0 t\u1ef1 kh\u1edfi \u0111\u1ed9ng l\u1ea1i container ho\u1eb7c reschedule Pod sang node kh\u00e1c khi c\u1ea7n.<\/td><td>Kh\u00f4ng c\u00f3 c\u01a1 ch\u1ebf t\u1ef1 \u0111\u1ed9ng kh\u1edfi \u0111\u1ed9ng l\u1ea1i container khi l\u1ed7i tr\u1eeb khi d\u00f9ng restart policy ho\u1eb7c Docker Swarm\uff09.<\/td><\/tr><tr><td>Kh\u1ea3 n\u0103ng qu\u1ea3n l\u00fd t\u00e0i nguy\u00ean<\/td><td>Qu\u1ea3n l\u00fd t\u00e0i nguy\u00ean to\u00e0n cluster, t\u1ed1i \u01b0u CPU, RAM, storage qua Resource Quotas, Limit Ranges, Quality of Service (QoS).<\/td><td>Gi\u1edbi h\u1ea1n \u1edf m\u1ee9c container ho\u1eb7c host.<\/td><\/tr><tr><td>M\u1ee9c \u0111\u1ed9 ph\u1ee9c t\u1ea1p<\/td><td>C\u1ea7n nhi\u1ec1u th\u1eddi gian h\u1ecdc, nh\u01b0ng m\u1ea1nh m\u1ebd v\u00e0 linh ho\u1ea1t h\u01a1n.<\/td><td>D\u1ec5 h\u1ecdc, ph\u00f9 h\u1ee3p v\u1edbi ng\u01b0\u1eddi m\u1edbi v\u00e0 development environment.<\/td><\/tr><tr><td>M\u1ed1i quan h\u1ec7 gi\u1eefa hai c\u00f4ng c\u1ee5<\/td><td>Kubernetes s\u1eed d\u1ee5ng Docker (ho\u1eb7c container runtime kh\u00e1c) \u0111\u1ec3 \u0111i\u1ec1u ph\u1ed1i v\u00e0 qu\u1ea3n l\u00fd container.<\/td><td>Docker build v\u00e0 t\u1ea1o container image theo OCI standard.<\/td><\/tr><tr><td>Networking<\/td><td>M\u1ea1ng ph\u1ee9c t\u1ea1p v\u1edbi CNI plugins (Calico, Flannel, Weave), h\u1ed7 tr\u1ee3 network policies.<\/td><td>Bridge network m\u1eb7c \u0111\u1ecbnh, c\u00f3 th\u1ec3 t\u1ea1o custom networks.<\/td><\/tr><tr><td>Storage<\/td><td>Persistent Volume (PV), Persistent Volume Claim (PVC) v\u00e0 Storage Class \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho c\u1ea5p ph\u00e1t l\u01b0u tr\u1eef \u0111\u1ed9ng (dynamic provisioning).<\/td><td>Volumes v\u00e0 bind mounts c\u01a1 b\u1ea3n.<\/td><\/tr><tr><td>Monitoring &amp; Logging<\/td><td>T\u00edch h\u1ee3p v\u1edbi Prometheus, Grafana, ELK Stack, v\u00e0 c\u00f3 s\u1eb5n metrics-server \u0111\u01b0\u1ee3c t\u00edch h\u1ee3p s\u1eb5n.<\/td><td>C\u1ea7n c\u00e0i \u0111\u1eb7t ri\u00eang c\u00e1c c\u00f4ng c\u1ee5 monitoring.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-kubernetes-co-lien-quan-d\u1ebfn-devops-khong\"><strong>Kubernetes c\u00f3 li\u00ean quan \u0111\u1ebfn DevOps kh\u00f4ng?<\/strong><\/h3>\n\n\n\n<p>Kubernetes c\u00f3 m\u1ed1i li\u00ean h\u1ec7 ch\u1eb7t ch\u1ebd v\u1edbi DevOps. Kubernetes gi\u00fap t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c tri\u1ec3n khai, gi\u00e1m s\u00e1t v\u00e0 m\u1edf r\u1ed9ng \u1ee9ng d\u1ee5ng, nh\u1eefng y\u1ebfu t\u1ed1 c\u1ed1t l\u00f5i trong quy tr\u00ecnh DevOps.<\/p>\n\n\n\n<p>V\u00ec v\u1eady, l\u00e0m ch\u1ee7 Kubernetes s\u1ebd gi\u00fap b\u1ea1n n\u00e2ng cao k\u1ef9 n\u0103ng DevOps v\u00e0 t\u1ed1i \u01b0u quy tr\u00ecnh ph\u00e1t tri\u1ec3n ph\u1ea7n m\u1ec1m.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><em>\u0110\u1ecdc chi ti\u1ebft: <strong><a href=\"https:\/\/itviec.com\/blog\/devops-roadmap\/\" target=\"_blank\" rel=\"noreferrer noopener\">DevOps roadmap: L\u1ed9 tr\u00ecnh 16 b\u01b0\u1edbc h\u1ecdc chi ti\u1ebft tr\u1edf th\u00e0nh DevOps<\/a><\/strong><\/em><\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-t\u1ed5ng-k\u1ebft\"><span class=\"ez-toc-section\" id=\"Tong_ket\"><\/span><strong>T\u1ed5ng k\u1ebft<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Kubernetes tutorial d\u00e0nh cho ng\u01b0\u1eddi m\u1edbi b\u1eaft \u0111\u1ea7u tr\u00ean \u0111\u00e2y l\u00e0 b\u01b0\u1edbc n\u1ec1n t\u1ea3ng \u0111\u1ec3 b\u1ea1n bi\u1ebft c\u00e1ch tri\u1ec3n khai, qu\u1ea3n l\u00fd v\u00e0 m\u1edf r\u1ed9ng \u1ee9ng d\u1ee5ng m\u1ed9t c\u00e1ch hi\u1ec7u qu\u1ea3. C\u00f3 k\u1ef9 n\u0103ng Kubernetes s\u1ebd gi\u00fap b\u1ea1n l\u00e0m ch\u1ee7 c\u00f4ng ngh\u1ec7 container hi\u1ec7n \u0111\u1ea1i, \u0111\u1ed3ng th\u1eddi m\u1edf ra nhi\u1ec1u c\u01a1 h\u1ed9i ph\u00e1t tri\u1ec3n trong l\u0129nh v\u1ef1c DevOps v\u00e0 Cloud-native.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kubernetes l\u00e0 m\u1ed9t trong nh\u1eefng c\u00f4ng c\u1ee5 quan tr\u1ecdng nh\u1ea5t \u0111\u1ed1i v\u1edbi DevOps v\u00e0 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y hi\u1ec7n nay, gi\u00fap qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng ch\u1ea1y trong container m\u1ed9t c\u00e1ch t\u1ef1 \u0111\u1ed9ng, linh ho\u1ea1t v\u00e0 \u0111\u00e1ng tin c\u1eady h\u01a1n. N\u1ebfu b\u1ea1n m\u1edbi b\u1eaft \u0111\u1ea7u t\u00ecm hi\u1ec3u, b\u00e0i Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n t\u00ecm hi\u1ec3u [&hellip;]<\/p>\n","protected":false},"author":214,"featured_media":93237,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","footnotes":""},"categories":[109],"tags":[],"class_list":["post-93233","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-chuyen-mon-it"],"blocksy_meta":[],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v27.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi - ITviec Blog<\/title>\n<meta name=\"description\" content=\"B\u00e0i Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n t\u00ecm hi\u1ec3u t\u1eebng b\u01b0\u1edbc v\u1eefng ch\u1eafc, l\u00e0m quen v\u1edbi c\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 b\u1eaft \u0111\u1ea7u th\u1ef1c h\u00e0nh Kubernetes c\u01a1 b\u1ea3n.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi\" \/>\n<meta property=\"og:description\" content=\"Kubernetes l\u00e0 m\u1ed9t trong nh\u1eefng c\u00f4ng c\u1ee5 quan tr\u1ecdng nh\u1ea5t \u0111\u1ed1i v\u1edbi DevOps v\u00e0 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y hi\u1ec7n nay, gi\u00fap qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng ch\u1ea1y trong container m\u1ed9t c\u00e1ch t\u1ef1\" \/>\n<meta property=\"og:url\" content=\"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"ITviec Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/ITviec\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-26T07:43:21+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-11-26T07:43:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"421\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Hi\u1ebfu Phan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@ITviec\" \/>\n<meta name=\"twitter:site\" content=\"@ITviec\" \/>\n<meta name=\"twitter:label1\" content=\"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hi\u1ebfu Phan\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 ph\u00fat\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi - ITviec Blog","description":"B\u00e0i Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n t\u00ecm hi\u1ec3u t\u1eebng b\u01b0\u1edbc v\u1eefng ch\u1eafc, l\u00e0m quen v\u1edbi c\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 b\u1eaft \u0111\u1ea7u th\u1ef1c h\u00e0nh Kubernetes c\u01a1 b\u1ea3n.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/","og_locale":"vi_VN","og_type":"article","og_title":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi","og_description":"Kubernetes l\u00e0 m\u1ed9t trong nh\u1eefng c\u00f4ng c\u1ee5 quan tr\u1ecdng nh\u1ea5t \u0111\u1ed1i v\u1edbi DevOps v\u00e0 \u0111i\u1ec7n to\u00e1n \u0111\u00e1m m\u00e2y hi\u1ec7n nay, gi\u00fap qu\u1ea3n l\u00fd \u1ee9ng d\u1ee5ng ch\u1ea1y trong container m\u1ed9t c\u00e1ch t\u1ef1","og_url":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/","og_site_name":"ITviec Blog","article_publisher":"https:\/\/www.facebook.com\/ITviec","article_published_time":"2025-11-26T07:43:21+00:00","article_modified_time":"2025-11-26T07:43:25+00:00","og_image":[{"width":800,"height":421,"url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png","type":"image\/png"}],"author":"Hi\u1ebfu Phan","twitter_card":"summary_large_image","twitter_creator":"@ITviec","twitter_site":"@ITviec","twitter_misc":{"\u0110\u01b0\u1ee3c vi\u1ebft b\u1edfi":"Hi\u1ebfu Phan","\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"23 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#article","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/"},"author":{"name":"Hi\u1ebfu Phan","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/d9f4dfc3237d95eb1549e5adb2ede904"},"headline":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi","datePublished":"2025-11-26T07:43:21+00:00","dateModified":"2025-11-26T07:43:25+00:00","mainEntityOfPage":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/"},"wordCount":6171,"publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"image":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png","articleSection":["Chuy\u00ean m\u00f4n IT"],"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/","url":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/","name":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi - ITviec Blog","isPartOf":{"@id":"https:\/\/itviec.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png","datePublished":"2025-11-26T07:43:21+00:00","dateModified":"2025-11-26T07:43:25+00:00","description":"B\u00e0i Kubernetes tutorial n\u00e0y s\u1ebd gi\u00fap b\u1ea1n t\u00ecm hi\u1ec3u t\u1eebng b\u01b0\u1edbc v\u1eefng ch\u1eafc, l\u00e0m quen v\u1edbi c\u00e1c kh\u00e1i ni\u1ec7m v\u00e0 b\u1eaft \u0111\u1ea7u th\u1ef1c h\u00e0nh Kubernetes c\u01a1 b\u1ea3n.","breadcrumb":{"@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/itviec.com\/blog\/kubernetes-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#primaryimage","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2025\/11\/kubernetes-tutorial-scaled.png","width":800,"height":421,"caption":"Kubernetes tutorial - itviec blog"},{"@type":"BreadcrumbList","@id":"https:\/\/itviec.com\/blog\/kubernetes-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Chuy\u00ean m\u00f4n IT","item":"https:\/\/itviec.com\/blog\/chuyen-mon-it\/"},{"@type":"ListItem","position":2,"name":"Kubernetes tutorial: Chi ti\u1ebft c\u00e1ch d\u00f9ng Kubernetes cho ng\u01b0\u1eddi m\u1edbi"}]},{"@type":"WebSite","@id":"https:\/\/itviec.com\/blog\/#website","url":"https:\/\/itviec.com\/blog\/","name":"ITviec Blog","description":"IT Jobs &amp; People in Vietnam","publisher":{"@id":"https:\/\/itviec.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/itviec.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"vi"},{"@type":"Organization","@id":"https:\/\/itviec.com\/blog\/#organization","name":"ITviec","url":"https:\/\/itviec.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2018\/12\/itviec-black-square-facebook.png","width":1800,"height":1800,"caption":"ITviec"},"image":{"@id":"https:\/\/itviec.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/ITviec","https:\/\/x.com\/ITviec","https:\/\/www.linkedin.com\/company\/itviec","https:\/\/www.youtube.com\/channel\/UCYthAQ3bcGr57M_ag5gHDvQ"]},{"@type":"Person","@id":"https:\/\/itviec.com\/blog\/#\/schema\/person\/d9f4dfc3237d95eb1549e5adb2ede904","name":"Hi\u1ebfu Phan","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/phan-trung-hieu-author-e1709881921227-100x100.jpg","url":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/phan-trung-hieu-author-e1709881921227-100x100.jpg","contentUrl":"https:\/\/itviec.com\/blog\/wp-content\/uploads\/2024\/03\/phan-trung-hieu-author-e1709881921227-100x100.jpg","caption":"Hi\u1ebfu Phan"},"url":"https:\/\/itviec.com\/blog\/author\/hieu-phan\/"}]}},"_links":{"self":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93233","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/users\/214"}],"replies":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/comments?post=93233"}],"version-history":[{"count":2,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93233\/revisions"}],"predecessor-version":[{"id":93238,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/posts\/93233\/revisions\/93238"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media\/93237"}],"wp:attachment":[{"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/media?parent=93233"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/categories?post=93233"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itviec.com\/blog\/wp-json\/wp\/v2\/tags?post=93233"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}