learn.lianglianglee.com/专栏/Kubernetes 从上手到实践/24 总结.md.html
2022-05-11 19:04:14 +08:00

485 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>24 总结.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/Kubernetes 从上手到实践/01 开篇: Kubernetes 是什么以及为什么需要它.md.html">01 开篇: Kubernetes 是什么以及为什么需要它.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/02 初步认识Kubernetes 基础概念.md.html">02 初步认识Kubernetes 基础概念.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/03 宏观认识:整体架构.md.html">03 宏观认识:整体架构.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/04 搭建 Kubernetes 集群 - 本地快速搭建.md.html">04 搭建 Kubernetes 集群 - 本地快速搭建.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/05 动手实践:搭建一个 Kubernetes 集群 - 生产可用.md.html">05 动手实践:搭建一个 Kubernetes 集群 - 生产可用.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/06 集群管理:初识 kubectl.md.html">06 集群管理:初识 kubectl.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/07 集群管理:以 Redis 为例-部署及访问.md.html">07 集群管理:以 Redis 为例-部署及访问.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/08 安全重点 认证和授权.md.html">08 安全重点 认证和授权.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/09 应用发布:部署实际项目.md.html">09 应用发布:部署实际项目.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/10 应用管理:初识 Helm.md.html">10 应用管理:初识 Helm.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/11 部署实践:以 Helm 部署项目.md.html">11 部署实践:以 Helm 部署项目.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/12 庖丁解牛kube-apiserver.md.html">12 庖丁解牛kube-apiserver.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/13 庖丁解牛etcd.md.html">13 庖丁解牛etcd.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/14 庖丁解牛controller-manager.md.html">14 庖丁解牛controller-manager.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/15 庖丁解牛kube-scheduler.md.html">15 庖丁解牛kube-scheduler.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/16 庖丁解牛kubelet.md.html">16 庖丁解牛kubelet.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/17 庖丁解牛kube-proxy.md.html">17 庖丁解牛kube-proxy.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/18 庖丁解牛Container Runtime Docker.md.html">18 庖丁解牛Container Runtime Docker.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/19 Troubleshoot.md.html">19 Troubleshoot.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/20 扩展增强Dashboard.md.html">20 扩展增强Dashboard.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/21 扩展增强CoreDNS.md.html">21 扩展增强CoreDNS.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/22 服务增强Ingress.md.html">22 服务增强Ingress.md.html</a>
</li>
<li>
<a href="/专栏/Kubernetes 从上手到实践/23 监控实践:对 K8S 集群进行监控.md.html">23 监控实践:对 K8S 集群进行监控.md.html</a>
</li>
<li>
<a class="current-tab" href="/专栏/Kubernetes 从上手到实践/24 总结.md.html">24 总结.md.html</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>24 总结</h1>
<h2>快速回顾</h2>
<p>经过了前面 23 节的内容,我们从 K8S 的基础概念入手,通过其基础架构了解到了 K8S 中所涉及到的各类组件。</p>
<p>通过动手实践,使用 <code>minikube</code> 搭建了本地的集群,使用 <code>kubeadm</code> 完成了服务器上的集群搭建,对 K8S 的部署有了更加清晰的认识。</p>
<p>这里再推荐另一种正在快速迭代的方式 <a href="https://github.com/kubernetes-sigs/kind">Kubernetes In Docker</a> 可以很方便的创建廉价的 K8S 集群,目前至支持单节点集群,多节点支持正在开发中。</p>
<p>后面,我们通过学习 <code>kubectl</code> 的使用,部署了 Redis 服务,了解到了一个服务在 K8S 中部署的操作,以及如何将服务暴露至集群外,以便访问。</p>
<p>当集群真正要被使用之前,权限管控也愈发重要,我们通过学习 <code>RBAC</code> 的相关知识,学习到了如何在 K8S 集群中创建权限可控的用户,而这部分的内容在后续小节中也被频繁用到。</p>
<p>接下来,我们以我们实际的一个项目 <a href="https://github.com/tao12345666333/saythx">SayThx</a> 为例,一步步的完成了项目的部署,在此过程中也学习到了配置文件的编写规范和要求。</p>
<p>当项目变大时,维护项目的更新也变成了一件很麻烦的事情。由此,我们引入了 <code>Helm</code> 作为我们的包管理软件,并使用它进行了项目的部署。</p>
<p>在此过程中也学习到了 Helm 的架构,以及如何编写一个 <code>Chart</code> 等知识。</p>
<p>前面我们主要集中于如何使用 K8S 上,接下了庖丁解牛系列便带我们一同深入至 K8S 内部,了解到了各基础组件的实际工作原理,也深入到了源码内部,了解其实现逻辑。</p>
<p>有这些理论知识作为基础,我们便可以大胆的将应用部署至 K8S 之上了。但实际环境可能多种多样,你可以会遇到各种各样的问题。</p>
<p>这里我们介绍了一些常见的 Troubleshoot 的方法,以便你在后续使用 K8S 的过程中遇到问题也可以快速的定位并解决问题。</p>
<p>此外,我们学习了 K8S 的一些扩展,比如 Dashboard 和 CoreDNS Dashboard 是一个比较直观的管理资源的方式,它也还在快速的发展和迭代中。</p>
<p>CoreDNS 在 K8S 1.13 中已经成为默认的 DNS 服务器,相信在不久之后, CoreDNS 也将会从 CNCF 毕业。</p>
<p>我们介绍了 <code>Ingress</code> 和在 K8S 中使用 <code>Promethes</code> 进行监控,不过监控涉及的方面很多,除了集群自身的监控外,应用层的监控也同样很重要。另外,监控和告警也是相辅相成的,在已有监控数据的前提下,如何更智能更优雅的告警也是我们需要考虑的点。否则,很容易造成告警风暴,有用的告警被忽略之类的。</p>
<h2>扩展阅读</h2>
<p>基于 K8S 的生态已经在逐步形成,只靠一本小册还远远不够,我们需要更多的对操作系统的了解,对 K8S 及其生态的了解。</p>
<p>以下推荐一些扩展阅读:</p>
<ul>
<li><a href="https://zhuanlan.zhihu.com/container">K8S 生态</a></li>
<li><a href="https://kubernetes.io/">K8S 网站</a></li>
<li><a href="https://www.cncf.io/newsroom/blog/">CNCF 博客</a></li>
<li><a href="https://github.com/kubernetes/">K8S 组织</a></li>
<li><a href="https://docs.docker.com/">Docker 文档</a></li>
<li><a href="https://prometheus.io/docs/introduction/overview/">Promethes 文档</a></li>
<li><a href="https://grafana.com/">Grafana 主页</a></li>
<li><a href="https://www.fluentd.org/">Fluentd 主页</a></li>
</ul>
<p>推荐一下自己的公众号: MoeLove</p>
<p><img src="assets/167de66cd75207c2" alt="img" /></p>
<p>不定期更新云原生生态中的相关技术。</p>
<h2>总结</h2>
<p>围绕 K8S 的云原生生态已经逐步形成,希望本小册能在你未来发展道路上起到一定的帮助。</p>
<p>K8S 涉及的知识面很广,小册中篇幅有限未能一一详解,欢迎大家共同讨探。</p>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/Kubernetes 从上手到实践/23 监控实践:对 K8S 集群进行监控.md.html">上一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"7099725968013d60","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>