Linux运维知识之使用 kubeadm 安装k8s
小标 2019-04-15 来源 : 阅读 1267 评论 0

摘要:本文主要向大家介绍了Linux运维知识之使用 kubeadm 安装k8s,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

本文主要向大家介绍了Linux运维知识之使用 kubeadm 安装k8s,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助。

<

</script>
<ul id="content-index-contents"><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#安装版本" title="安装版本"><span>安装版本</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#机器规划" title="机器规划"><span>机器规划</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#系统配置(三台机器都执行)" title="系统配置(三台机器都执行)"><span>系统配置(三台机器都执行)</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#安装docker并启动(三台机器都执行)" title="安装docker并启动(三台机器都执行)"><span>安装docker并启动(三台机器都执行)</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#导入必要的镜像" title="导入必要的镜像"><span>导入必要的镜像</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#安装 kubeadm (三台机器都执行)" title="安装 kubeadm (三台机器都执行)"><span>安装 kubeadm (三台机器都执行)</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#配置启动 kubelet (三台机器都执行)" title="配置启动 kubelet (三台机器都执行)"><span>配置启动 kubelet (三台机器都执行)</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#初始化k8s集群 (master机器执行)" title="初始化k8s集群 (master机器执行)"><span>初始化k8s集群 (master机器执行)</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#配置 k8s 网络 – flannel" title="配置 k8s 网络 – flannel"><span>配置 k8s 网络 – flannel</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#其它节点添加到集群" title="其它节点添加到集群"><span>其它节点添加到集群</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#部署 k8s Dashboard" title="部署 k8s Dashboard"><span>部署 k8s Dashboard</span></a></li><li><a href="https://www.centos.bz/2018/07/%e4%bd%bf%e7%94%a8-kubeadm-%e5%ae%89%e8%a3%85k8s/#kubectl 命令补全" title="kubectl 命令补全"><span>kubectl 命令补全</span></a></li></ul></div>
<h2 id="安装版本">安装版本</h2>
<p>Kubernetes – 1.11.1</p>
<h2 id="机器规划">机器规划</h2>
<p><img data-tag="bdshare" src="https://www.centos.bz/wp-content/uploads/2018/07/1-16.jpg" alt="" class="alignnone size-full wp-image-21564" height="165" width="696"></p>
<p>注:三台机器已做key认证并添加hosts, 方便传送文件</p>
<h2 id="系统配置(三台机器都执行)">系统配置(三台机器都执行)</h2>
<p>关闭selinux及firewalld</p>
<pre><code>sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl stop firewalld &amp;&amp; systemctl disable firewalld
</code></pre>
<p>内核参数调整</p>
<pre><code>cat &lt;&lt;EOF &gt;  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
</code></pre>
<p>关闭swap, 注释fstab中的swap配置</p>
<pre><code>swapoff -a
</code></pre>
<p>注: k8s 版本1.8开始要求关闭系统的swap,否则启动不了kubelet;</p>
<h2 id="安装docker并启动(三台机器都执行)">安装docker并启动(三台机器都执行)</h2>
<p><a href="https://www.centos.bz/tag/docker/">docker</a>从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE; 比如: 18.06 为18年6月份发布的版本;</p>
<p>安装包官方地址:</p>
<pre><code><a href="https://www.centos.bz/tag/https/">https</a>://download.docker.com/<a href="https://www.centos.bz/tag/linux/">linux</a>/<a href="https://www.centos.bz/tag/centos/">centos</a>/7/x86_64/stable/Packages/
</code></pre>
<p>下载安装 docker-ce 17.03版本:</p>
<pre><code>wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
wget -c https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm
yum install -y docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch.rpm docker-ce-17.03.2.ce-1.el7.centos.x86_64.rpm
</code></pre>
<p>注:本次安装的版本为 17.03 ; k8s-1.11.1 对应的最高版本docker是 17.03 ;</p>
<p>修改docker启动配置文件:</p>
<p>/usr/lib/systemd/system/docker.service</p>
<pre><code># 指定监听端口、数据存储目录以及加速镜像源
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H 127.0.0.1:8888 -g /data/docker --registry-mirror=//xxxx.io --exec-opt native.cgroupdriver=systemd
</code></pre>
<p>启动 docker :</p>
<pre><code>systemctl daemon-reload &amp;&amp; systemctl enable docker &amp;&amp; systemctl start docker
</code></pre>
<h2 id="导入必要的镜像">导入必要的镜像</h2>
<p>默认使用 kubeadm 初始化集群时需要从 k8s.gcr.io 地址上拉取相关镜像,如果可以科学上网的,这一步可以省略;</p>
<p><a href="https://www.centos.bz/tag/master/">master</a>节点执行:</p>
<pre><code>images=(kube-apiserver-amd64.tar kube-controller-manager-amd64.tar kube-scheduler-amd64.tar kubernetes-dashboard-amd64.tar etcd-amd64.tar coredns.tar <a href="https://www.centos.bz/tag/flannel/">flannel</a>.tar kube-proxy-amd64.tar pause.tar)
for i in ${images[@]};do
    docker load &lt; $(dirname $script_dir)/$i
done
</code></pre>
<p>node节点执行:</p>
<pre><code>images=(flannel.tar kube-proxy-amd64.tar pause.tar)
for i in ${images[@]};do
    docker load &lt; $(dirname $script_dir)/$i
done
</code></pre>
<p>镜像分享地址:</p>
<pre><code>链接: https://pan.baidu.com/s/1jtT0qHpcz1WjovIBP6JOwQ 密码:5xxn
</code></pre>
<h2 id="安装 kubeadm (三台机器都执行)">安装 kubeadm (三台机器都执行)</h2>
<p>添加 yum 源:</p>
<pre><code>cat &gt; /etc/yum.repos.d/kubernetes.repo &lt;&lt;EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
EOF
</code></pre>
<p>安装 kubeadm :</p>
<pre><code># 列出最新版本
yum list kubeadm --showduplicates
# 安装
yum install kubeadm-1.11.1
</code></pre>
<p>注:安装 kubeadm ,相关依赖会安装 kubectl、kubelet、kubernetes-cni ; kubectl 是管理集群的工具,kubelet 是每个node节点都会运行的一个服务,用于管理节点的docker启动、网络组件等功能;</p>
<h2 id="配置启动 kubelet (三台机器都执行)">配置启动 kubelet (三台机器都执行)</h2>
<p>确保kubelet和docker使用同一个cgroupdriver, 这里使用systemd;</p>
<p>kubelet 额外参数配置:</p>
<p>/etc/sysconfig/kubelet</p>
<pre><code>KUBELET_EXTRA_ARGS="--runtime-cgroups=/systemd/system.slice --kubelet-cgroups=/systemd/system.slice"
</code></pre>
<p>启动 kubelet :</p>
<pre><code>systemctl enable kubelet &amp;&amp; systemctl start kubelet
</code></pre>
<h2 id="初始化k8s集群 (master机器执行)">初始化k8s集群 (master机器执行)</h2>
<p>初始化:</p>
<pre><code>kubeadm init --apiserver-advertise-address 10.211.55.10 --pod-network-cidr=10.10.0.0/16  --kubernetes-version=v1.11.1
</code></pre>
<p>初始化完成后会有以下提示:</p>
<pre><code>[addons] Applied essential addon: CoreDNS
[addons] Applied essential addon: kube-proxy

Your Kubernetes master has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of machines by running the following on each node
as root:

  kubeadm join 10.211.55.10:6443 --<a href="https://www.centos.bz/tag/token/">token</a> 4zfhdz.8jue59q95hzoc7p9 --discovery-token-ca-cert-hash sha256:da756adb30db06963db480d3868b9acd02c2e38271314baf62e9d28c6629ae92
</code></pre>
<p>增加kubectl权限访问:</p>
<pre><code>mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
</code></pre>
<h2 id="配置 k8s 网络 – flannel">配置 k8s 网络 – flannel</h2>
<p>Kubernetes支持Flannel、<a href="https://www.centos.bz/tag/calico/">Calico</a>、Weave network等多种cni网络Drivers;</p>
<p>配置 flannel :</p>
<pre><code>wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f  kube-flannel.yml
</code></pre>
<p>如果有多张网卡,需要在kube-flannel.yml中使用–iface参数指定集群主机内网网卡的名称, 类似 :</p>
<pre><code>args:
- --ip-masq
- --kube-subnet-mgr
- --iface=eth1
</code></pre>
<p><strong>查看 k8s 集群状态</strong></p>
<p>查看集群状态 :</p>
<pre><code>kubectl get cs
</code></pre>
<p>查看 pods :</p>
<pre><code>kubectl get pod --all-namespaces
</code></pre>
<h2 id="其它节点添加到集群">其它节点添加到集群</h2>
<p>集群初始化完成后可以看到,最后有提示加入集群的命令,但token是有时间限制的,可能过一段时间就过期了,可以通过以下命令成生新的命令:</p>
<pre><code>kubeadm token create --print-join-command
</code></pre>
<p>输出类似:</p>
<pre><code>kubeadm join 10.211.55.10:6443 --token pxlvg5.puu7a0mrhpoif16e --discovery-token-ca-cert-hash sha256:f732ceef958151c56583641048ce6a11c39f960166969fb8f782374c3b4a7570
</code></pre>
<p>查看已有 token :</p>
<pre><code>kubeadm token list
</code></pre>
<h2 id="部署 k8s Dashboard">部署 k8s Dashboard</h2>
<p>下载部署配置文件:</p>
<pre><code>wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
</code></pre>
<p>指向端口类型为 NodePort , 可以使用 节点ip:端口 访问 :</p>
<p>修改 kubernetes-dashboard.yaml</p>
<pre><code># ------------------- Dashboard Service ------------------- #

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  type: NodePort
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
</code></pre>
<p>因 k8s 在1.6版本以后 kube-apiserver 启用了 RBAC 授权, 因此需要认证权限配置文件 :</p>
<p>增加 kubernetes-dashboard-admin.rbac.yaml</p>
<pre><code>---
apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard-admin
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-admin
  labels:
    k8s-app: kubernetes-dashboard
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: kubernetes-dashboard-admin
  namespace: kube-system
</code></pre>
<p>节点增加标签用法:</p>
<pre><code>kubectl <a href="https://www.centos.bz/tag/label/">label</a> nodes &lt;node-name&gt; &lt;label-key&gt;=&lt;label-value&gt;
kubectl get nodes
kubectl label nodes k8s-master1 k8s-app=kubernetes-dashboard
</code></pre>
<p>查看 dashboard 分配到的 NodePort :</p>
<pre><code>kubectl get svc,pod --all-namespaces | grep dashboard
</code></pre>
<p>创建 dashboard 的 pod :</p>
<pre><code>kubectl create -f kubernetes-dashboard.yaml
kubectl create -f kubernetes-dashboard-admin.rbac.yaml
</code></pre>
<p>查看登陆 dashboard 的token :</p>
<pre><code>kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token
</code></pre>
<h2 id="kubectl 命令补全">kubectl 命令补全</h2>
<pre><code>yum install -y bash-completion
<a href="https://www.centos.bz/tag/source/">source</a> /usr/share/bash-completion/bash_completion
source &lt;(kubectl completion bash)
echo "source &lt;(kubectl completion bash)" &gt;&gt; ~/.bashrc
</code></pre>            <p>原文出处:bijizhan -&gt; <a rel="nofollow" href="//www.bijizhan.com/post/kubernetes-kubeadm-install">//www.bijizhan.com/post/kubernetes-kubeadm-install</a></p>    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注系统运维Linux频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程