mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-15 21:53:50 +08:00
u
This commit is contained in:
@@ -25,13 +25,7 @@
|
||||
<meta name="generator" content="Hexo 4.2.0">
|
||||
|
||||
</head>
|
||||
|
||||
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
|
||||
<div class="book-container">
|
||||
|
||||
<div class="book-sidebar">
|
||||
@@ -55,325 +49,166 @@
|
||||
<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 class="current-tab" 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 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() {
|
||||
@@ -383,9 +218,6 @@
|
||||
inner.classList.add('show')
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function remove_inner() {
|
||||
|
||||
let inner = document.querySelector('.sidebar-toggle-inner')
|
||||
@@ -393,9 +225,6 @@
|
||||
inner.classList.remove('show')
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function sidebar_toggle() {
|
||||
|
||||
let sidebar_toggle = document.querySelector('.sidebar-toggle')
|
||||
@@ -425,9 +254,6 @@
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function open_sidebar() {
|
||||
|
||||
let sidebar = document.querySelector('.book-sidebar')
|
||||
@@ -451,13 +277,7 @@ function hide_canvas() {
|
||||
overlay.classList.remove('show')
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<div class="off-canvas-content">
|
||||
|
||||
<div class="columns">
|
||||
@@ -513,31 +333,16 @@ function hide_canvas() {
|
||||
<p>我们使用了前端框架 <a href="https://vuejs.org/">Vue</a>,所以在做生产部署时,需要先在 <a href="https://nodejs.org/">Node JS</a> 的环境下进行打包构建。包管理器使用的是 <a href="https://yarnpkg.com/">Yarn</a>。然后使用 <a href="https://nginx.com/">Nginx</a> 提供服务,并进行反向代理,将请求正确的代理至后端。</p>
|
||||
|
||||
<pre><code>FROM node:10.13 as builder
|
||||
|
||||
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . /app
|
||||
|
||||
|
||||
|
||||
RUN yarn install \
|
||||
|
||||
&& yarn build
|
||||
|
||||
|
||||
|
||||
FROM nginx:1.15
|
||||
|
||||
|
||||
|
||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html/
|
||||
|
||||
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
</code></pre>
|
||||
@@ -555,13 +360,7 @@ server {
|
||||
listen 80;
|
||||
|
||||
server_name localhost;
|
||||
|
||||
|
||||
|
||||
charset utf-8;
|
||||
|
||||
|
||||
|
||||
location / {
|
||||
|
||||
root /usr/share/nginx/html;
|
||||
@@ -569,9 +368,6 @@ server {
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
location ~ ^/(api) {
|
||||
|
||||
proxy_pass http://backend-up;
|
||||
@@ -589,9 +385,6 @@ server {
|
||||
<p>后端是使用 <a href="https://golang.org/">Golang</a> 编写的 API 服务,对请求进行相应处理,并将数据存储至 <a href="http://redis.io/">Redis</a> 当中。依赖管理使用的是 <a href="https://github.com/golang/dep">dep</a>。由于 Golang 是编译型语言,编译完成后会生成一个二进制文件,为了让镜像尽可能小,所以 Dockerfile 和前端的差不多,都使用了<a href="https://docs.docker.com/develop/develop-images/multistage-build/">多阶段构建</a>的特性。</p>
|
||||
|
||||
<pre><code>FROM golang:1.11.1 as builder
|
||||
|
||||
|
||||
|
||||
WORKDIR /go/src/be
|
||||
|
||||
COPY . /go/src/be
|
||||
@@ -601,9 +394,6 @@ RUN go get -u github.com/golang/dep/cmd/dep \
|
||||
&& dep ensure \
|
||||
|
||||
&& go build
|
||||
|
||||
|
||||
|
||||
FROM debian:stretch-slim
|
||||
|
||||
COPY --from=builder /go/src/be/be /usr/bin/be
|
||||
@@ -621,17 +411,11 @@ EXPOSE 8080
|
||||
<p>Work 端使用的是 <a href="https://python.org/">Python</a>,用于计算已经存储至 Redis 当中的数据,并生成排行榜。依赖使用 <a href="https://github.com/pypa/pip">pip</a> 进行安装。对于 Python 的镜像选择,我做了一组<a href="http://moelove.info/docker-python-perf/">性能对比的测试</a> 有兴趣可以了解下。</p>
|
||||
|
||||
<pre><code>FROM python:3.7-slim
|
||||
|
||||
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY . /app
|
||||
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
|
||||
|
||||
ENTRYPOINT ["python", "work.py"]
|
||||
|
||||
</code></pre>
|
||||
@@ -669,9 +453,6 @@ ENTRYPOINT ["python", "work.py"]
|
||||
<p><a href="https://docs.docker.com/compose/overview/">Docker Compose</a> 是一种较为简单的可进行容器编排的技术,需要创建一个配置文件,通常情况下为 <code>docker-compose.yml</code> 。在 saythx 项目的根目录下我已经创建好了 <code>docker-compose.yml</code> 的配置文件。</p>
|
||||
|
||||
<pre><code>version: '3'
|
||||
|
||||
|
||||
|
||||
services:
|
||||
|
||||
saythx-frontend:
|
||||
@@ -693,9 +474,6 @@ services:
|
||||
networks:
|
||||
|
||||
- saythx
|
||||
|
||||
|
||||
|
||||
saythx-backend:
|
||||
|
||||
build:
|
||||
@@ -739,9 +517,6 @@ services:
|
||||
- REDIS_HOST=saythx-redis
|
||||
|
||||
- REDIS_PORT=6379
|
||||
|
||||
|
||||
|
||||
saythx-redis:
|
||||
|
||||
image: "redis:5"
|
||||
@@ -749,9 +524,6 @@ services:
|
||||
networks:
|
||||
|
||||
- saythx
|
||||
|
||||
|
||||
|
||||
networks:
|
||||
|
||||
saythx:
|
||||
@@ -765,9 +537,6 @@ networks:
|
||||
<p>打开另外的终端,进入项目根目录内,执行 <code>docker-compose ps</code> 命令即可看到当前的服务情况。</p>
|
||||
|
||||
<pre><code>➜ saythx git:(master) ✗ docker-compose ps
|
||||
|
||||
|
||||
|
||||
Name Command State Ports
|
||||
|
||||
----------------------------------------------------------------------------------------
|
||||
@@ -909,15 +678,9 @@ deployment.apps/saythx-redis created
|
||||
NAME READY STATUS RESTARTS AGE
|
||||
|
||||
pod/saythx-redis-79d8f9864d-x8fp9 1/1 Running 0 4s
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
|
||||
|
||||
deployment.apps/saythx-redis 1 1 1 1 4s
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
|
||||
replicaset.apps/saythx-redis-79d8f9864d 1 1 1 4s
|
||||
@@ -1057,23 +820,14 @@ NAME READY STATUS RESTARTS AG
|
||||
pod/saythx-backend-c5f9f6d95-lmtxn 0/1 ContainerCreating 0 5s
|
||||
|
||||
pod/saythx-redis-8558c7d7d-kcmzk 1/1 Running 0 17m
|
||||
|
||||
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
|
||||
service/saythx-redis NodePort 10.107.31.242 <none> 6379:31467/TCP 1m
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
|
||||
|
||||
deployment.apps/saythx-backend 1 1 1 0 5s
|
||||
|
||||
deployment.apps/saythx-redis 1 1 1 1 17m
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
|
||||
replicaset.apps/saythx-backend-c5f9f6d95 1 1 0 5s
|
||||
@@ -1207,17 +961,11 @@ pod/saythx-backend-c5f9f6d95-lmtxn 1/1 Running 0 16m
|
||||
pod/saythx-frontend-678d544b86-wp9gr 1/1 Running 0 30s
|
||||
|
||||
pod/saythx-redis-8558c7d7d-kcmzk 1/1 Running 0 34m
|
||||
|
||||
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
|
||||
service/saythx-backend NodePort 10.104.0.47 <none> 8080:32051/TCP 15m
|
||||
|
||||
service/saythx-redis NodePort 10.107.31.242 <none> 6379:31467/TCP 18m
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
|
||||
|
||||
deployment.apps/saythx-backend 1 1 1 1 16m
|
||||
@@ -1225,9 +973,6 @@ deployment.apps/saythx-backend 1 1 1 1 1
|
||||
deployment.apps/saythx-frontend 1 1 1 1 30s
|
||||
|
||||
deployment.apps/saythx-redis 1 1 1 1 34m
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
|
||||
replicaset.apps/saythx-backend-c5f9f6d95 1 1 1 16m
|
||||
@@ -1367,9 +1112,6 @@ pod/saythx-frontend-678d544b86-wp9gr 1/1 Running 0
|
||||
pod/saythx-redis-8558c7d7d-kcmzk 1/1 Running 0 39m
|
||||
|
||||
pod/saythx-work-6b9958dc47-hh9td 0/1 ContainerCreating 0 7s
|
||||
|
||||
|
||||
|
||||
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
|
||||
|
||||
service/saythx-backend NodePort 10.104.0.47 <none> 8080:32051/TCP 20m
|
||||
@@ -1377,9 +1119,6 @@ service/saythx-backend NodePort 10.104.0.47 <none> 8080:32
|
||||
service/saythx-frontend NodePort 10.96.221.71 <none> 80:32682/TCP 3m
|
||||
|
||||
service/saythx-redis NodePort 10.107.31.242 <none> 6379:31467/TCP 23m
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
|
||||
|
||||
deployment.apps/saythx-backend 1 1 1 1 22m
|
||||
@@ -1389,9 +1128,6 @@ deployment.apps/saythx-frontend 1 1 1 1 5
|
||||
deployment.apps/saythx-redis 1 1 1 1 39m
|
||||
|
||||
deployment.apps/saythx-work 1 1 1 0 7s
|
||||
|
||||
|
||||
|
||||
NAME DESIRED CURRENT READY AGE
|
||||
|
||||
replicaset.apps/saythx-backend-c5f9f6d95 1 1 1 22m
|
||||
@@ -1443,9 +1179,6 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
@@ -1453,9 +1186,6 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
|
||||
|
||||
</div>
|
||||
@@ -1471,17 +1201,11 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
<script>
|
||||
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
|
||||
|
||||
|
||||
function gtag() {
|
||||
|
||||
dataLayer.push(arguments);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-NPSEEVD756');
|
||||
@@ -1507,9 +1231,6 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
setCookie("lastPath", path)
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function setCookie(cname, cvalue) {
|
||||
|
||||
var d = new Date();
|
||||
@@ -1521,9 +1242,6 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function getCookie(cname) {
|
||||
|
||||
var name = cname + "=";
|
||||
@@ -1541,12 +1259,6 @@ replicaset.apps/saythx-work-6b9958dc47 1 1 0 7s
|
||||
return "";
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
</html>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user