Files
kuboard-press/docs/install/install-k8s.html
huanqing.shao 10b59aa33a 备案号
2019-07-31 12:29:24 +08:00

142 lines
32 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>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>安装 Kubernetes 单Master节点 | Kuboard</title>
<meta name="description" content="A cool Kubernetes Dashboard">
<meta name="keywords" content="Kubernetes, Docker, Dashboard, Kuboard, Linux, K8S, cluster, 分布式, 集群, 容器, 高可用">
<meta property="article:modified_time" content="Mon Jul 29 2019 19:20:00 GMT+0800 (GMT+08:00)"><meta property="og:site_name" content="Kuboard"><meta property="og:title" content="安装 Kubernetes 单Master节点"><meta property="og:type" content="website"><meta property="og:url" content="/install/install-k8s.html"><meta name="twitter:title" content="安装 Kubernetes 单Master节点"><meta name="twitter:url" content="/install/install-k8s.html"><meta name="twitter:card" content="summary_large_image">
<link rel="preload" href="/assets/css/0.styles.10e5d9a9.css" as="style"><link rel="preload" href="/assets/js/app.f23e884f.js" as="script"><link rel="preload" href="/assets/js/11.32fc5ebf.js" as="script"><link rel="preload" href="/assets/js/2.dd0e1f2c.js" as="script"><link rel="preload" href="/assets/js/18.14596f73.js" as="script"><link rel="prefetch" href="/assets/js/10.95ba08b2.js"><link rel="prefetch" href="/assets/js/12.fd26a3df.js"><link rel="prefetch" href="/assets/js/13.5ae79232.js"><link rel="prefetch" href="/assets/js/14.71b75ecf.js"><link rel="prefetch" href="/assets/js/15.f69e0361.js"><link rel="prefetch" href="/assets/js/16.b573c9f3.js"><link rel="prefetch" href="/assets/js/17.da6085e6.js"><link rel="prefetch" href="/assets/js/19.99531f86.js"><link rel="prefetch" href="/assets/js/20.78eca6e0.js"><link rel="prefetch" href="/assets/js/21.9cd05e22.js"><link rel="prefetch" href="/assets/js/22.351a9028.js"><link rel="prefetch" href="/assets/js/23.a6ac5f5d.js"><link rel="prefetch" href="/assets/js/24.e321ee47.js"><link rel="prefetch" href="/assets/js/25.9e7c566b.js"><link rel="prefetch" href="/assets/js/26.98ad856b.js"><link rel="prefetch" href="/assets/js/27.9646c768.js"><link rel="prefetch" href="/assets/js/28.b1a5c5c7.js"><link rel="prefetch" href="/assets/js/29.da45b8ef.js"><link rel="prefetch" href="/assets/js/3.703f0de7.js"><link rel="prefetch" href="/assets/js/30.b524eaaf.js"><link rel="prefetch" href="/assets/js/31.c6fd3342.js"><link rel="prefetch" href="/assets/js/32.b266ee0b.js"><link rel="prefetch" href="/assets/js/33.b52fe074.js"><link rel="prefetch" href="/assets/js/34.638cc37d.js"><link rel="prefetch" href="/assets/js/35.2886039d.js"><link rel="prefetch" href="/assets/js/36.99a592e7.js"><link rel="prefetch" href="/assets/js/37.15829647.js"><link rel="prefetch" href="/assets/js/38.d769f9c2.js"><link rel="prefetch" href="/assets/js/39.722b7242.js"><link rel="prefetch" href="/assets/js/4.66bc3e23.js"><link rel="prefetch" href="/assets/js/40.ac5bf3e7.js"><link rel="prefetch" href="/assets/js/41.31c3cf0b.js"><link rel="prefetch" href="/assets/js/42.113effc0.js"><link rel="prefetch" href="/assets/js/43.9bf36849.js"><link rel="prefetch" href="/assets/js/44.fab29163.js"><link rel="prefetch" href="/assets/js/45.844db78f.js"><link rel="prefetch" href="/assets/js/46.29a73952.js"><link rel="prefetch" href="/assets/js/47.87cdf921.js"><link rel="prefetch" href="/assets/js/48.b7a3d198.js"><link rel="prefetch" href="/assets/js/5.1fe86328.js"><link rel="prefetch" href="/assets/js/6.c494a4ac.js"><link rel="prefetch" href="/assets/js/7.aa7720c7.js"><link rel="prefetch" href="/assets/js/8.83400c95.js"><link rel="prefetch" href="/assets/js/9.41808376.js">
<link rel="stylesheet" href="/assets/css/0.styles.10e5d9a9.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container" data-v-73c41bb9><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/" class="home-link router-link-active"><!----> <span class="site-name">Kuboard</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/overview/" class="nav-link">简介</a></div><div class="nav-item"><a href="/install/install-dashboard.html" class="nav-link">安装</a></div><div class="nav-item"><a href="/guide/" class="nav-link">使用</a></div><div class="nav-item"><a href="/micro-service/spring-cloud/" class="nav-link">微服务</a></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><div data-v-73c41bb9><div style="text-align:center;margin-top:20px;" data-v-73c41bb9><div class="side-nav-item" style="margin-left:0;" data-v-73c41bb9><a href="/overview/" class="nav-link" data-v-73c41bb9>简介</a></div> <div class="side-nav-item" style="border-bottom:2px solid #0b85ff;" data-v-73c41bb9><a href="/install/install-dashboard" class="nav-link router-link-exact-active router-link-active" data-v-73c41bb9>安装</a></div> <div class="side-nav-item" data-v-73c41bb9><a href="/guide/" class="nav-link" data-v-73c41bb9>使用</a></div> <div class="side-nav-item" data-v-73c41bb9><a href="/micro-service/spring-cloud/" class="nav-link" data-v-73c41bb9>微服务</a></div></div></div> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>安装 Kubernetes</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/install/install-k8s.html" class="active sidebar-link">安装 Kubernetes 单Master节点</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/install/install-k8s.html#制作标准机镜像" class="sidebar-link">制作标准机镜像</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/install/install-k8s.html#安装docker" class="sidebar-link">安装docker</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#安装-nfs-utils" class="sidebar-link">安装 nfs-utils</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#k8s基本配置" class="sidebar-link">K8S基本配置</a></li></ul></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#初始化-master-节点" class="sidebar-link">初始化 master 节点</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#初始化-worker节点" class="sidebar-link">初始化 worker节点</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/install/install-k8s.html#获得-join命令参数" class="sidebar-link">获得 join命令参数</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#初始化worker" class="sidebar-link">初始化worker</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#检查初始化结果" class="sidebar-link">检查初始化结果</a></li></ul></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#移除-worker-节点" class="sidebar-link">移除 worker 节点</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#安装-ingress-controller" class="sidebar-link">安装 Ingress Controller</a></li><li class="sidebar-sub-header"><a href="/install/install-k8s.html#下一步" class="sidebar-link">下一步</a></li></ul></li><li><a href="/install/install-kubernetes.html" class="sidebar-link">安装 Kubernetes 高可用</a></li><li><a href="/install/install-kubectl.html" class="sidebar-link">从客户端电脑远程管理 Kubernetes</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>安装 Kuboard</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/install/install-dashboard.html" class="sidebar-link">安装 Kuboard</a></li><li><a href="/install/install-dashboard-upgrade.html" class="sidebar-link">升级 Kuboard</a></li></ul></section></li></ul> <div style="text-align: center; margin-top: 5vh;"><strong>在线体验</strong> <div><a target="_blank" href="http://demo.eip.work/#/login?isReadOnly=true&amp;token=eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJrdWJvYXJkLXZpZXdlci10b2tlbi1mdGw0diIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJrdWJvYXJkLXZpZXdlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImE1YWFiMmQxLTQxMjYtNDU5Yi1hZmNhLTkyYzMwZDk0NTQzNSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTprdWJvYXJkLXZpZXdlciJ9.eYqN3FLIT6xs0-lm8AidZtaiuHeX70QTn9FhJglhEyh5dlyMU5lo8UtR-h1OY8sTSeYdYKJAS83-9SUObKQhp6XNmRgOYAfZblKUy4mvbGVQ3dn_qnzxYxt6zdGCwIY7E34eNNd9IjMF7G_Y4eJLWE7NvkSB1O8zbdn8En9rQXv_xJ9-ugCyr4CYB1lDGuZl3CIXgQ1FWcQdUBrxTT95tzcNTB0l6OUOGhRxOfw-RyIOST83GV5U0iVzxnD4sjgSaJefvCU-BmwXgpxAwRVhFyHEziXXa0CuZfBfJbmnQW308B4wocr4QDm6Nvmli1P3B6Yo9-HNF__d2hCwZEr7eg"><p><img src="/assets/img/image-20190723104717575.f44900d3.png" style="width: 226px; height: 127px;"></p></a></div> <p><strong><a href="https://github.com/shaohq/kuboard-issues/issues" target="_blank">提交 BUG</a></strong></p> <strong>在线提问</strong> <p><img src="/assets/img/kuboard_qq.45e78dbf.png"></p></div></aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="安装-kubernetes-单master节点"><a href="#安装-kubernetes-单master节点" aria-hidden="true" class="header-anchor">#</a> 安装 Kubernetes 单Master节点</h1> <p>对于 Kubernetes 初学者,推荐在阿里云采购如下配置:</p> <ul><li>3台 2核4G 的ECS突发性能实例 t5 ecs.t5-c1m2.large或同等配置单台约 0.4元/小时,停机时不收费)</li> <li>Cent OS 7.6</li></ul> <p><a href="https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=obezo3pg" target="_blank" rel="noopener noreferrer">领取阿里云最高2000元红包<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a></p> <p>Kuboard 的 Live Demo 环境使用的是如下拓扑结构,本文档描述了如何在完成该 demo 环境的搭建。</p> <p>完成安装后,对应的软件版本为:</p> <ul><li>Kubernetes v1.15.0</li> <li>Docker 18.09.7</li></ul> <p><img src="/assets/img/image-20190726214032585.f5bc62e4.png" alt="image-20190726214032585"></p> <h2 id="制作标准机镜像"><a href="#制作标准机镜像" aria-hidden="true" class="header-anchor">#</a> 制作标准机镜像</h2> <p>通过使用标准机镜像,可以</p> <ul><li><strong>避免重复执行对测试机安装必要软件的过程</strong></li> <li><strong>以一种相对标准化的过程管理测试机的维护</strong></li></ul> <p>标准机镜像中预装了如下内容:</p> <ul><li>docker</li> <li>nfs-utils</li> <li>kubernetes images</li></ul> <div class="tip custom-block"><ul><li>您也可以不制作标准机镜像,而是在三台机器上都执行 <em><strong>制作标准机镜像</strong></em> 中的所有操作步骤</li></ul></div> <p><strong>标准机镜像的制作过程描述如下:</strong></p> <h3 id="安装docker"><a href="#安装docker" aria-hidden="true" class="header-anchor">#</a> 安装docker</h3> <p><strong>卸载旧版本</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">sudo</span> yum remove docker <span class="token punctuation">\</span>
docker-client <span class="token punctuation">\</span>
docker-client-latest <span class="token punctuation">\</span>
docker-common <span class="token punctuation">\</span>
docker-latest <span class="token punctuation">\</span>
docker-latest-logrotate <span class="token punctuation">\</span>
docker-logrotate <span class="token punctuation">\</span>
docker-selinux <span class="token punctuation">\</span>
docker-engine-selinux <span class="token punctuation">\</span>
docker-engine
</code></pre></div><p><strong>下载依赖包及安装包</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">wget</span> https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
<span class="token function">wget</span> https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-18.09.7-3.el7.x86_64.rpm
<span class="token function">wget</span> https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-18.09.7-3.el7.x86_64.rpm
</code></pre></div><p><strong>安装</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">sudo</span> yum <span class="token function">install</span> -y containerd.io-1.2.6-3.3.el7.x86_64.rpm
<span class="token function">sudo</span> yum <span class="token function">install</span> -y docker-ce-cli-18.09.7-3.el7.x86_64.rpm
<span class="token function">sudo</span> yum <span class="token function">install</span> -y docker-ce-18.09.7-3.el7.x86_64.rpm
<span class="token function">sudo</span> systemctl <span class="token builtin class-name">enable</span> docker
</code></pre></div><p><strong>启动 docker 服务</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">sudo</span> systemctl start docker
</code></pre></div><p><strong>检查 docker 版本</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
docker version
</code></pre></div><blockquote><p><strong>参考文档</strong></p> <p>https://docs.docker.com/install/linux/docker-ce/centos/</p> <p>https://docs.docker.com/install/linux/linux-postinstall/</p></blockquote> <h3 id="安装-nfs-utils"><a href="#安装-nfs-utils" aria-hidden="true" class="header-anchor">#</a> 安装 nfs-utils</h3> <p><strong>执行安装命令</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">sudo</span> yum <span class="token function">install</span> -y nfs-utils
</code></pre></div><p>必须先安装 nfs-utils 才能挂载 nfs 网络存储</p> <h3 id="k8s基本配置"><a href="#k8s基本配置" aria-hidden="true" class="header-anchor">#</a> K8S基本配置</h3> <p><strong>配置K8S的yum源</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">cat</span> <span class="token operator">&lt;&lt;</span>EOF <span class="token operator">&gt;</span> /etc/yum.repos.d/kubernetes.repo
<span class="token punctuation">[</span>kubernetes<span class="token punctuation">]</span>
<span class="token assign-left variable">name</span><span class="token operator">=</span>Kubernetes
<span class="token assign-left variable">baseurl</span><span class="token operator">=</span>http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
<span class="token assign-left variable">enabled</span><span class="token operator">=</span><span class="token number">1</span>
<span class="token assign-left variable">gpgcheck</span><span class="token operator">=</span><span class="token number">0</span>
<span class="token assign-left variable">repo_gpgcheck</span><span class="token operator">=</span><span class="token number">0</span>
<span class="token assign-left variable">gpgkey</span><span class="token operator">=</span>http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
</code></pre></div><p><strong>关闭 防火墙、SeLinux、swap</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
systemctl stop firewalld
systemctl disable firewalld
setenforce <span class="token number">0</span>
<span class="token function">sed</span> -i <span class="token string">&quot;s/SELINUX=enforcing/SELINUX=disabled/g&quot;</span> /etc/selinux/config
swapoff -a
<span class="token function">yes</span> <span class="token operator">|</span> <span class="token function">cp</span> /etc/fstab /etc/fstab_bak
<span class="token function">cat</span> /etc/fstab_bak <span class="token operator">|</span><span class="token function">grep</span> -v swap <span class="token operator">&gt;</span> /etc/fstab
</code></pre></div><p><strong>修改 /etc/sysctl.conf</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">vim</span> /etc/sysctl.conf
</code></pre></div><p>向其中添加</p> <div class="language- extra-class"><pre class="language-text"><code>net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
</code></pre></div><p>如下图所示</p> <p><img src="/assets/img/image-20190715085036593.55559549.png" alt="image-20190715085036593" title=":size=600x445"></p> <p>执行命令以应用</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
sysctl -p
</code></pre></div><p><strong>安装kubelet、kubeadm、kubectl</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
yum <span class="token function">install</span> -y kubelet-1.15.0 kubeadm-1.15.0 kubectl-1.15.0
</code></pre></div><p><strong>修改docker Cgroup Driver为systemd</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">vim</span> /usr/lib/systemd/system/docker.service
</code></pre></div><p>向其中添加</p> <div class="language- extra-class"><pre class="language-text"><code>--exec-opt native.cgroupdriver=systemd
</code></pre></div><p>如下图所示</p> <p><img src="/assets/img/image2019-07-15_09.01.21.0e0d34f2.png" alt="屏幕快照 2019-07-15 09.01.21" title=":size=1000x326"></p> <p>重启 docker</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
systemctl daemon-reload
systemctl restart docker
</code></pre></div><p><strong>启动kubelet</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
systemctl <span class="token builtin class-name">enable</span> kubelet <span class="token operator">&amp;&amp;</span> systemctl start kubelet
</code></pre></div><p><strong>加载 kubernetes 镜像</strong></p> <p>由于k8s服务相关镜像在国外镜像源国内无法访问</p> <p>执行以下命令添加docker k8s国内镜像源</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
<span class="token function">curl</span> -sSL https://get.daocloud.io/daotools/set_mirror.sh <span class="token operator">|</span> <span class="token function">sh</span> -s http://f1361db2.m.daocloud.io
systemctl restart docker
</code></pre></div><p><strong>拉取k8s相关镜像</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
docker pull mirrorgooglecontainers/kube-apiserver:v1.15.0
docker pull mirrorgooglecontainers/kube-controller-manager:v1.15.0
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-proxy:v1.15.0
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.3.10
docker pull coredns/coredns:1.3.1
</code></pre></div><p><strong>更改镜像名为k8s官网镜像</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 在 master 节点和 worker 节点都要执行</span>
docker tag d235b23c3570 k8s.gcr.io/kube-proxy:v1.15.0
docker tag 201c7a840312 k8s.gcr.io/kube-apiserver:v1.15.0
docker tag 2d3813851e87 k8s.gcr.io/kube-scheduler:v1.15.0
docker tag 8328bb49b652 k8s.gcr.io/kube-controller-manager:v1.15.0
docker tag da86e6ba6ca1 k8s.gcr.io/pause:3.1
docker tag eb516548c180 k8s.gcr.io/coredns:1.3.1
docker tag 2c4adeb21b4f k8s.gcr.io/etcd:3.3.10
</code></pre></div><p><strong>制作镜像</strong></p> <p>请参考阿里云基于ECS <a href="https://help.aliyun.com/document_detail/35109.html?spm=5176.2020520101.0.0.75fc4df5mtdFmV" target="_blank" rel="noopener noreferrer">制作虚拟机镜像<svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></a> 的文档</p> <h2 id="初始化-master-节点"><a href="#初始化-master-节点" aria-hidden="true" class="header-anchor">#</a> 初始化 master 节点</h2> <div class="tip custom-block"><p>以 root 身份在 demo-master-a-1 机器上执行</p></div> <p><strong>配置 apiserver.demo 的域名</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
<span class="token builtin class-name">echo</span> <span class="token string">&quot;x.x.x.x apiserver.demo&quot;</span> <span class="token operator">&gt;&gt;</span> /etc/hosts
</code></pre></div><div class="warning custom-block"><p>请替换其中的 x.x.x.x 为您的 demo-master-a-1 的实际 ip 地址</p></div> <p><strong>创建 ./kubeadm-config.yaml</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
<span class="token function">vim</span> ./kubeadm-config.yaml
</code></pre></div><div class="language-yaml extra-class"><pre class="language-yaml"><code><span class="token key atrule">apiVersion</span><span class="token punctuation">:</span> kubeadm.k8s.io/v1beta1
<span class="token key atrule">kind</span><span class="token punctuation">:</span> ClusterConfiguration
<span class="token key atrule">kubernetesVersion</span><span class="token punctuation">:</span> v1.15.0
<span class="token key atrule">controlPlaneEndpoint</span><span class="token punctuation">:</span> <span class="token string">&quot;apiserver.demo:6443&quot;</span>
</code></pre></div><p><strong>初始化 apiserver</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubeadm init --config<span class="token operator">=</span>kubeadm-config.yaml --upload-certs
</code></pre></div><p>执行结果如下图所示:</p> <p><img src="/assets/img/image-20190715101542756.5934c00e.png" alt="image-20190715101542756" title=":size=800x388"></p> <p><strong>初始化 root 用户的 kubectl 配置</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
<span class="token function">rm</span> -rf /root/.kube/
<span class="token function">mkdir</span> /root/.kube/
<span class="token function">cp</span> -i /etc/kubernetes/admin.conf /root/.kube/config
</code></pre></div><p><strong>安装 calico</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubectl apply -f https://docs.projectcalico.org/v3.6/getting-started/kubernetes/installation/hosted/kubernetes-datastore/calico-networking/1.7/calico.yaml
</code></pre></div><blockquote><p>安装calico 请参考https://docs.projectcalico.org/v3.6/getting-started/kubernetes/</p></blockquote> <p><strong>等待calico安装就绪</strong></p> <p>执行如下命令,等待 3-10 分钟,直到所有的容器组处于 Running 状态</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
<span class="token function">watch</span> kubectl get pod -n kube-system
</code></pre></div><p><strong>检查 master 初始化结果</strong></p> <p>在 master 节点 demo-master-a-1 上执行</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubectl get nodes
</code></pre></div><h2 id="初始化-worker节点"><a href="#初始化-worker节点" aria-hidden="true" class="header-anchor">#</a> 初始化 worker节点</h2> <h3 id="获得-join命令参数"><a href="#获得-join命令参数" aria-hidden="true" class="header-anchor">#</a> 获得 join命令参数</h3> <p><strong>在 master 节点 demo-master-a-1 节点执行</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubeadm token create --print-join-command
</code></pre></div><p>可获取kubeadm join 命令及参数,如下所示</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># kubeadm token create 命令的输出</span>
kubeadm <span class="token function">join</span> apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
</code></pre></div><h3 id="初始化worker"><a href="#初始化worker" aria-hidden="true" class="header-anchor">#</a> 初始化worker</h3> <p><strong>针对所有的 worker 节点执行</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 worker 节点执行</span>
<span class="token builtin class-name">echo</span> <span class="token string">&quot;x.x.x.x apiserver.demo&quot;</span> <span class="token operator">&gt;&gt;</span> /etc/hosts
kubeadm <span class="token function">join</span> apiserver.demo:6443 --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha256:6f7a8e40a810323672de5eee6f4d19aa2dbdb38411845a1bf5dd63485c43d303
</code></pre></div><div class="tip custom-block"><ul><li>将 x.x.x.x 替换为 demo-master-a-1 的实际 ip</li> <li>将 kubeadm join 命令后的参数替换为上一个步骤中实际从 demo-master-a-1 节点获得的参数</li></ul></div> <h3 id="检查初始化结果"><a href="#检查初始化结果" aria-hidden="true" class="header-anchor">#</a> 检查初始化结果</h3> <p>在 master 节点 demo-master-a-1 上执行</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubectl get nodes
</code></pre></div><p><img src="/assets/img/image-20190715193838012.eca23618.png" alt="image-20190715193838012"></p> <h2 id="移除-worker-节点"><a href="#移除-worker-节点" aria-hidden="true" class="header-anchor">#</a> 移除 worker 节点</h2> <div class="warning custom-block"><p>正常情况下,您无需移除 worker 节点,如果添加到集群出错,您可以移除 worker 节点,再重新尝试添加</p></div> <p>在准备移除的 worker 节点上执行</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 worker 节点执行</span>
kubeadm reset
</code></pre></div><p>在 master 节点 demo-master-a-1 上执行</p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubectl delete node demo-worker-x-x
</code></pre></div><div class="tip custom-block"><ul><li>将 demo-worker-x-x 替换为要移除的 worker 节点的名字</li> <li>worker 节点的名字可以通过在节点 demo-master-a-1 上执行 kubectl get nodes 命令获得</li></ul></div> <h2 id="安装-ingress-controller"><a href="#安装-ingress-controller" aria-hidden="true" class="header-anchor">#</a> 安装 Ingress Controller</h2> <blockquote><p>Ingress官方文档https://kubernetes.io/docs/concepts/services-networking/ingress/</p> <p>Ingress Controllers官网介绍https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/</p> <p>本文中使用如下部署方式https://kubernetes.github.io/ingress-nginx/deploy/baremetal/#using-a-self-provisioned-edge</p> <p>kubernetes支持多种Ingress Controllers本文推荐使用 https://github.com/nginxinc/kubernetes-ingress</p></blockquote> <p><strong>在 demo-master-a-1 上执行</strong></p> <div class="language-sh extra-class"><pre class="language-sh"><code><span class="token comment"># 只在 master 节点执行</span>
kubectl apply -f https://raw.githubusercontent.com/eip-work/eip-monitor-repository/master/dashboard/nginx-ingress.yaml
</code></pre></div><p><strong>配置域名解析</strong></p> <p>将域名 *.demo.yourdomain.com 解析到 demo-worker-a-2 的 IP 地址 z.z.z.z (也可以是 demo-worker-a-1 的地址 y.y.y.y</p> <div class="tip custom-block"><p>由于需要申请域名,过程会比较繁琐,有如下两种替代方案:</p> <ul><li>在您的客户端机器访问部署在K8S上的 web 应用的浏览器所在的机器)设置 hosts 配置;</li> <li>暂时放弃域名的配置,临时使用 NodePort 或者 <code>kubectl port-forward</code> 的方式访问部署在 K8S 上的 web 应用</li></ul></div> <p><strong>验证配置</strong></p> <p>在浏览器访问 a.demo.yourdomain.com将得到 404 NotFound 错误页面</p> <h2 id="下一步"><a href="#下一步" aria-hidden="true" class="header-anchor">#</a> 下一步</h2> <p>🎉 🎉 🎉</p> <p>您已经完成了 Kubernetes 集群的安装,下一步请:</p> <p><a href="/install/install-dashboard">安装 Kuboard</a></p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/eip-work/kuboard-press/edit/master/install/install-k8s.md" target="_blank" rel="noopener noreferrer">帮助我们改善此页面!</a> <svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg></div> <div class="last-updated"><span class="prefix">更新时间: </span> <span class="time">2019-07-29 19:20:00</span></div></footer> <div class="page-nav"><p class="inner"><!----> <span class="next"><a href="/install/install-kubernetes.html">
安装 Kubernetes 高可用
</a>
</span></p></div> <div class="bottom-description" data-v-73c41bb9>Copyright © 2019-present Huanqing Shao | 京ICP备19008693号-2</div></main></div><div class="global-ui"><!----><div class="reading-progress top" data-v-7681808f><div class="progress" data-v-7681808f></div></div></div></div>
<script src="/assets/js/app.f23e884f.js" defer></script><script src="/assets/js/11.32fc5ebf.js" defer></script><script src="/assets/js/2.dd0e1f2c.js" defer></script><script src="/assets/js/18.14596f73.js" defer></script>
</body>
</html>