在 Ubuntu 上安装 K8S教程
<h2 id="在-ubuntu-上安装-k8s教程">在 Ubuntu 上安装 K8S教程</h2><p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>在 Ubuntu 上安装 K8S教程<ul><li>1,更新系统源</li><li>2,更新软件包</li><li>3,安装 Docker</li><li>也可以参考其它过程安装</li><li>4,安装 K8S</li><li>5,初始化</li><li>6,使主节点生效</li><li>7,查看 Node</li><li>8,安装面板</li><li>9,访问面板(dashboard)</li><li>10,添加 Node 进行测试</li></ul></li></ul></div><p></p>
<h3 id="1更新系统源">1,更新系统源</h3>
<p>如果系统本身自带得镜像地址,服务器在国外,下载速度会很慢,可以打开 <code>/etc/apt/sources.lis</code> 替换为国内得镜像源。</p>
<pre><code class="language-shell">apt upgrade
</code></pre>
<h3 id="2更新软件包">2,更新软件包</h3>
<p>将系统得软件组件更新至最新稳定版本。</p>
<pre><code class="language-shell">apt update
</code></pre>
<h3 id="3安装-docker">3,安装 Docker</h3>
<h3 id="也可以参考其它过程安装">也可以参考其它过程安装</h3>
<pre><code class="language-c#">apt-get install docker.io
</code></pre>
<p>如果需要配置为开机启动,可执行以下命令</p>
<pre><code class="language-C#">systemcd enable docker
systemcd start docker
</code></pre>
<p>如果要配置 Docker 镜像加速,打开 <code>/etc/docker/daemon.json</code> 文件,registry-mirrors 增加或修改,加入<code>https://registry.docker-cn.com</code> 这个地址,也可以填写阿里云腾讯云等镜像加速地址。</p>
<p>示例</p>
<pre><code class="language-{">{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
</code></pre>
<p>重启 Docker,使配置生效</p>
<pre><code class="language-shell">sudo systemctl daemon-reload
sudo systemctl restart docker
</code></pre>
<h3 id="4安装-k8s">4,安装 K8S</h3>
<p>执行以下命令安装 https 工具以及 k8s。</p>
<pre><code class="language-c#">apt-get update && apt-get install -y apt-transport-https curl
apt-get install -y kubelet kubeadm kubectl --allow-unauthenticated
</code></pre>
<p>执行下面命令测试是否正常</p>
<pre><code class="language-shell">kubeadm init
</code></pre>
<p>如果安装时,出现下面情况,说明系统得镜像源中,找不到 k8s 的软件包。</p>
<pre><code>No apt package "kubeadm", but there is a snap with that name.
Try "snap install kubeadm"
No apt package "kubectl", but there is a snap with that name.
Try "snap install kubectl"
No apt package "kubelet", but there is a snap with that name.
Try "snap install kubelet"
</code></pre>
<p>可以打开 <code>/etc/apt/sources.list </code> 文件,添加一行</p>
<pre><code>deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
</code></pre>
<p>再次执行安装 K8s 的命令。</p>
<p>如果出现</p>
<pre><code>The following signatures couldn't be verified because the public key is not available
</code></pre>
<p>则执行下面命令,为期添加 key。</p>
<pre><code class="language-c#">curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
</code></pre>
<p>上面命令,安装了 <code>kubelet</code>、<code>kubeadm</code>、<code>kubectl</code> ,<code>kubelet</code> 是 k8s 相关服务,<code>kubectl</code> 是 <code>k8s</code> 管理客户端,<code>kubeadm</code> 是部署工具。</p>
<h3 id="5初始化">5,初始化</h3>
<p>执行下面命令进行初始化,会自动从网络中下载需要的 Docker 镜像。</p>
<p>此命令是用来部署主节点的(Master)。</p>
<p>执行 <code>kubeadm version</code> 查看版本,<code>GitVersion:"v1.17.2"</code> 中即为版本号。</p>
<p>执行以下命令初始化</p>
<pre><code class="language-shell">kubeadm init --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=NumCPU
</code></pre>
<p><code>--ignore-preflight-errors=NumCPU</code> 是在只有一个 CPU 的时候使用,例如 1G1M 的学生服务器。</p>
<p>但是因为需要连接到 Google ,所以可能无法下载内容。</p>
<p>我们可以通过使用 <code>kubeadm config images list</code> 命令,列举需要拉取的镜像。我们来手动通过 Docker 拉取。这个过程比较麻烦,还需要手动修改镜像名称。</p>
<p>拉取方法 <code>docker pull {镜像名称}</code>。</p>
<p>Google 访问不了,不过 DockerHub 已经备份好需要的镜像。</p>
<p>mirrorgooglecontainers 这个仓库备份了相应的镜像。遗憾的是,镜像不一定都是最新的备份。阿里云上面的 google_containers 仓库应该是备份最新的。</p>
<p>例如需要以下镜像</p>
<pre><code class="language-shell">k8s.gcr.io/kube-apiserver:v1.17.2
k8s.gcr.io/kube-controller-manager:v1.17.2
k8s.gcr.io/kube-scheduler:v1.17.2
k8s.gcr.io/kube-proxy:v1.17.2
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
</code></pre>
<p>则拉取对应的镜像</p>
<pre><code>docker pull mirrorgooglecontainers/kube-apiserver:v1.17.2
docker pull mirrorgooglecontainers/kube-controller-manager:v1.17.2
docker pull mirrorgooglecontainers/kube-scheduler:v1.15.0
docker pull mirrorgooglecontainers/kube-proxy:v1.17.2
docker pull mirrorgooglecontainers/pause:3.1
docker pull mirrorgooglecontainers/etcd:3.4.3-0
docker pull coredns/coredns:1.6.5
</code></pre>
<p>使用 <code>docker tag {旧名称:版本}:{新名称:版本}</code> ,将镜像改名。</p>
<p>考虑到各种情况和可能会出现问题,笔者这里给出一个别人写的一键脚本,可以直接一键完成这一步。</p>
<pre><code class="language-shell">touch pullk8s.sh # 创建脚本文件
</code></pre>
<pre><code class="language-shell">nano pullk8s.sh # 编辑脚本
</code></pre>
<p>然后将以下内容复制进去</p>
<pre><code class="language-shell">foriin`kubeadm config images list`;do
imageName=${i#k8s.gcr.io/}
docker pull registry.aliyuncs.com/google_containers/$imageName
docker tag registry.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName
docker rmi registry.aliyuncs.com/google_containers/$imageName
done;
</code></pre>
<p>保存文件</p>
<pre><code>Ctrl + O
回车键
Ctrl + x
</code></pre>
<p>给脚本文件赋权限</p>
<pre><code class="language-shell">chmod +x pullk8s.sh
</code></pre>
<p>执行脚本</p>
<pre><code class="language-shell">sh pullk8s.sh
</code></pre>
<p>然后执行 <code>docker images</code> 命令查看需要的镜像是否都准备好了。</p>
<pre><code>root@instance-wxxixh4k:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
k8s.gcr.io/kube-proxy v1.17.2 cba2a99699bd 2 weeks ago 116MB
k8s.gcr.io/kube-apiserver v1.17.2 41ef50a5f06a 2 weeks ago 171MB
k8s.gcr.io/kube-controller-manager v1.17.2 da5fd66c4068 2 weeks ago 161MB
k8s.gcr.io/kube-scheduler v1.17.2 f52d4c527ef2 2 weeks ago 94.4MB
k8s.gcr.io/coredns 1.6.5 70f311871ae1 3 months ago 41.6MB
k8s.gcr.io/etcd 3.4.3-0 303ce5db0e90 3 months ago 288MB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 2 years ago 742kB
</code></pre>
<p>最后执行 开头的初始化命令。</p>
<p>实在不行的话,可以尝试 https://learnku.com/articles/29209 中的安装教程。</p>
<h3 id="6使主节点生效">6,使主节点生效</h3>
<p>添加环境变量</p>
<pre><code class="language-shell">export KUBECONFIG=/etc/kubernetes/admin.conf
</code></pre>
<p>添加网络插件</p>
<pre><code>kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
</code></pre>
<p>运行别人编写好的 yaml 配置文件</p>
<pre><code class="language-shell">kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
</code></pre>
<p>这一步也可以自己编写 yaml 。</p>
<p>执行后出现</p>
<pre><code>odsecuritypolicy.policy/psp.flannel.unprivileged created
clusterrole.rbac.authorization.k8s.io/flannel created
clusterrolebinding.rbac.authorization.k8s.io/flannel created
serviceaccount/flannel created
configmap/kube-flannel-cfg created
daemonset.apps/kube-flannel-ds-amd64 created
daemonset.apps/kube-flannel-ds-arm64 created
daemonset.apps/kube-flannel-ds-arm created
daemonset.apps/kube-flannel-ds-ppc64le created
daemonset.apps/kube-flannel-ds-s390x created
</code></pre>
<p><strong>保存使用配置</strong></p>
<pre><code class="language-c#">kubeadm join
</code></pre>
<h3 id="7查看-node">7,查看 Node</h3>
<p><strong>执行以下命令查看 Node</strong></p>
<pre><code>kubectl get nodes
</code></pre>
<p>结果示例</p>
<pre><code class="language-shell">root@instance-wxxixh4k:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
instance-wxxixh4k Ready master 9m23s v1.17.2
</code></pre>
<p>说明已经成功了,并且能够添加移除 Node。</p>
<h3 id="8安装面板">8,安装面板</h3>
<p><strong>下载 yaml 配置文件</strong></p>
<pre><code class="language-shell">wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/alternative/kubernetes-dashboard.yaml
</code></pre>
<p>使用 <code>cat kubernetes-dashboard.yaml</code> 命令查看 yaml 文件内容,记录版本号。</p>
<p>文件中有类型以下内容的语句,后面的数字就是版本号。</p>
<pre><code> image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
</code></pre>
<p>拉取 <code>kubernetes-dashboard </code> 镜像(注意修改后面的版本号)。</p>
<pre><code>docker pull registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
docker tag registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
</code></pre>
<p><strong>安装 kubernetes-dashboard</strong></p>
<pre><code>kubectl create -f kubernetes-dashboard.yaml
</code></pre>
<p><strong>查看安装结果</strong></p>
<pre><code>kubectl get pod --namespace=kube-system
</code></pre>
<p><strong>配置面板,添加 Admin 账号和权限</strong></p>
<p>复制粘贴下面内容到终端,按回车键。</p>
<pre><code class="language-yaml">cat <<EOF > dashboard-admin.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: kubernetes-dashboard
labels:
k8s-app: kubernetes-dashboard
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: kubernetes-dashboard
namespace: kube-system
EOF
</code></pre>
<p>上面代码会创建一个 dashboard-admin.yaml 文件。</p>
<p><strong>执行安装</strong></p>
<pre><code class="language-c#">kubectl create -f dashboard-admin.yaml
</code></pre>
<p><strong>查看节点端口</strong></p>
<pre><code>kubectl get svc --namespace=kube-system
</code></pre>
<p>找到名为 <code>kubernetes-dashboard</code> 的节点,记录端口 。</p>
<p><strong>查看 pod 名称</strong></p>
<pre><code>kubectl get pod --namespace=kube-system
</code></pre>
<p>其中有一个 <code>kubernetes-dashboard</code> 开头的,例如 <code>kubernetes-dashboard-6bf999dbcc-nc4hq</code>,记录名称。</p>
<h3 id="9访问面板dashboard">9,访问面板(dashboard)</h3>
<p>如果以下方法无法使用,请参考</p>
<p>https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/</p>
<p><strong>方法一:kubectl proxy</strong></p>
<p>执行</p>
<pre><code>kubectl proxy
</code></pre>
<p>内网即可使用下面地址访问</p>
<p>http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/</p>
<p><strong>方法二:API Server</strong></p>
<p>访问方法</p>
<p>https://{master-ip}:{apiserver-port}/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/</p>
<p>这里不再赘述,详细请参考网路资料。</p>
<p>方法三:直接暴露端口(NodePort)</p>
<p>不推荐使用。</p>
<p>执行</p>
<pre><code>kubectl -n kube-system edit service kubernetes-dashboard
</code></pre>
<p>找到 <code>type: ClusterIP</code>,改成 <code>type: NodePort</code>。</p>
<p>另外 <code> port</code> 也可以改一下。</p>
<p>提示:</p>
<p>进入时,先使用方向键盘移动到合适位置;删除字符请使用 <code>Delete</code> 键;</p>
<p>然后按一下 <code>Esc</code> 键,按下 <code>i</code> 键进入编辑;</p>
<p>按一下 <code>Esc</code> 键,按一下 <code>Shift + q</code>,会提示输入内容,输入 <code>wq!</code> 保存并退出。</p>
<p>执行 <code>kubectl -n kube-system get service kubernetes-dashboard</code> 查看到端口映射。</p>
<p>例如</p>
<pre><code> 80:31901/TCP
</code></pre>
<p>则访问方法是 https://{ip}:31901</p>
<p><strong>方法三</strong></p>
<pre><code class="language-shell">kubectl port-forward kubernetes-dashboard-6bf999dbcc-nc4hq 8080:80 --namespace=kube-system &
</code></pre>
<h3 id="10添加-node-进行测试">10,添加 Node 进行测试</h3>
<pre><code class="language-shell">kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=8090 --type=NodePort
</code></pre>
<p>外网访问 8090 即可访问到 Nginx。</p>
</div>
<div id="MySignature" role="contentinfo">
痴者工良(https://whuanle.cn)<br><br>
来源:https://www.cnblogs.com/whuanle/p/12260471.html
頁:
[1]