使用Kubeadm建立k8s集群之节点部署(三十一)

前言         

本篇部署教程将讲述k8s集群的节点(master和工做节点)部署,请先按照上一篇教程完成节点的准备。本篇教程中的操做所有使用脚本完成,而且对于某些状况(好比镜像拉取问题)还提供了多种解决方案。不过基于部署环境和k8s的复杂性,咱们须要对k8s集群部署过程当中的一些步骤都有所了解,尤为是kubeadm init命令。css


 

目录

主节点部署 html

  1. Kubeadm以及相关工具包的安装
    node

  2. 批量拉取k8s相关镜像
    nginx

  3. 使用“kubeadm init”启动k8s主节点
    git

  4. 启动k8s主节点
    github

  5. kubectl认证
    docker

  6. 安装flannel网络插件api

  7. 检查集群状态安全

     

工做节点部署 ruby

  1. 安装 kubelet

  2. 拉取相关镜像

  3. 使用“kubeadm join”将当前节点加入集群

  4. 复制admin.conf而且设置配置

  5. 查看集群节点状态

     

安装仪表盘 


 

 主节点部署

当上述步骤完成后,咱们依照如下步骤来完成主节点的安装:

1.Kubeadm以及相关工具包的安装

 安装脚本以下所示:

#配置源
echo '#k8s
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
'>/etc/yum.repos.d/kubernetes.repo
#kubeadm和相关工具包
yum -y install kubelet kubeadm kubectl kubernetes-cni
注意,以上脚本使用阿里云镜像进行安装。

若是成功安装,会提示“完毕!”:

安装完成以后,须要重启kubelet:

systemctl daemon-reload
systemctl enable kubelet

2.批量拉取k8s相关镜像

若是使用代理、国际网络或者指定镜像库地址,此步骤能够忽略。在国内,因为国际网络问题,k8s相关镜像在国内可能没法下载,所以咱们须要手动准备。

首先,咱们先使用“kubeadm config”命令来查看kubeadm相关镜像的列表:

kubeadm config images list

接下来咱们能够从其余仓库批量下载镜像而且修改镜像标签:

#批量下载镜像
kubeadm config images list |sed -e 's/^/docker pull /g' -e 's#k8s.gcr.io#docker.io/mirrorgooglecontainers#g' |sh -x
#批量命名镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker tag ",$1":"$2,$1":"$2}' |sed -e 's# mirrorgooglecontainers# k8s.gcr.io#2' |sh -x
#批量删除mirrorgooglecontainers镜像
docker images |grep mirrorgooglecontainers |awk '{print "docker rmi ", $1":"$2}' |sh -x
# coredns没包含在docker.io/mirrorgooglecontainers中
docker pull coredns/coredns:1.3.1
docker tag coredns/coredns:1.3.1 k8s.gcr.io/coredns:1.3.1
docker rmi coredns/coredns:1.3.1

注:coredns没包含在docker.io/mirrorgooglecontainers中,须要手工从coredns官方镜像转换下。

通过漫长的等待以后,若是镜像下载完成,咱们能够执行命令“docker images”来查看本地镜像是否均已准备稳当:

东西都准备好了,接下来咱们就能够来建立集群了。

3.使用“kubeadm init”启动k8s主节点

 在前面,咱们讲解过了“kubeadm init”命令能够用于启动一个Kubernetes主节点,语法以下所示:

kubeadm init [flags]

其中主要的参数以下所示:

可选参数

说明

--apiserver-advertise-address

指定API Server地址

--apiserver-bind-port

指定绑定的API Server端口,默认值为6443

--apiserver-cert-extra-sans

指定API Server的服务器证书

--cert-dir

指定证书的路径

--dry-run

输出将要执行的操做,不作任何改变

--feature-gates

指定功能配置键值对,可控制是否启用各类功能

-h, --help

输出init命令的帮助信息

--ignore-preflight-errors

忽视检查项错误列表,例如“IsPrivilegedUser,Swap”,如填写为 'all' 则将忽视全部的检查项错误

--kubernetes-version

指定Kubernetes版本

--node-name

指定节点名称

--pod-network-cidr

指定pod网络IP地址段

--service-cidr

指定service的IP地址段

--service-dns-domain

指定Service的域名,默认为“cluster.local”

--skip-token-print

不打印Token

--token

指定token

--token-ttl

指定token有效时间,若是设置为“0”,则永不过时

--image-repository

指定镜像仓库地址,默认为"k8s.gcr.io"

值得注意的是,如上所述,若是咱们不想每次都手动批量拉取镜像,咱们可使用参数“--image-repository”来指定第三方镜像仓库,以下述命令所示:

kubeadm init --kubernetes-version=v1.15.0  --apiserver-advertise-address=172.16.2.201  --pod-network-cidr=10.0.0.0/16 --service-cidr 11.0.0.0/12 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers

“kubeadm init”命令会执行系列步骤来保障启动一个k8s主节点,咱们能够经过命令“kubeadm init --dry-run”来查看其将进行的一些步骤,了解了其动做,咱们才能保障在安装的过程当中处理起来游刃有余:

如上图所示,其主体常规步骤(部分步骤根据参数会有变更)以下:

  1. 肯定Kubernetes版本。

  2. 预检。出现错误则退出安装,好比虚拟内存(swap)没关闭,端口被占用。出现错误时,请用心按照按照提示进行处理,不推荐使用“--ignore-preflight-errors”来忽略。

  3. 写入kubelet配置。

  4. 生成自签名的CA证书(可指定已有证书)。

  5. 将 kubeconfig 文件写入 /etc/kubernetes/ 目录以便 kubelet、controller-manager 和 scheduler 用来链接到 API server,它们每个都有本身的身份标识,同时生成一个名为 admin.conf 的独立的kubeconfig文件,用于管理操做(咱们下面会用到)。

  6. 为 kube-apiserver、kube-controller-manager和kube-scheduler生成静态Pod的定义文件。若是没有提供外部的etcd服务的话,也会为etcd生成一份额外的静态Pod定义文件。这些静态Pod的定义文件会写入到“/etc/kubernetes/manifests”目录(以下图所示),kubelet会监视这个目录以便在系统启动的时候建立这些Pod。

 

注意:静态Pod是由kubelet进行管理,仅存在于特定节点上的Pod。它们不能经过API Server进行管理,没法与ReplicationController、Deployment或DaemonSet进行关联,而且kubelet也没法对其健康检查。静态 Pod 始终绑定在某一个kubelet,而且始终运行在同一个节点上。

 

  1. 对master节点应用labels和taints以便不会在它上面运行其它的工做负载,也就是说master节点只作管理不干活。

  2. 生成令牌以便其它节点注册。

  3. 执行必要配置(好比集群ConfigMap,RBAC等)。

  4. 安装“CoreDNS”组件(在 1.11 版本以及更新版本的Kubernetes中,CoreDNS是默认的DNS服务器)和“kube-proxy”组件。

 

4.启动k8s主节点

 根据前面的规划,以及刚才讲述的“kubeadm init”命令语法和执行步骤,咱们使用以下命令来启动k8s集群主节点:

kubeadm init --kubernetes-version=v1.15.0  --apiserver-advertise-address=172.16.2.201  --pod-network-cidr=10.0.0.0/16 --service-cidr 11.0.0.0/16

其中,kubernetes version为v1.15.0,apiserver地址为172.16.2.201,pod IP段为10.0.0.0/16。

具体执行细节以下所示:

集群建立成功后,注意这一条命令须要保存好,以便后续将节点添加到集群时使用:

kubeadm join 172.16.2.201:6443 --token jx82lw.8ephcufcot5j06v7 \
    --discovery-token-ca-cert-hash sha256:180a8dfb45398cc6c3addd84a61c1

令牌是用于主节点和新添加的节点之间进行相互身份验证的,所以须要确保其安全,由于任何人一旦知道了这些令牌,就能够随便给集群添加节点。若是令牌过时了,咱们可使用 “kubeadm token”命令来列出、建立和删除这类令牌,具体操做见后续的《集群异常解决方案》。

 

5.kubectl认证

 集群主节点启动以后,咱们须要使用kubectl来管理集群,在开始前,咱们须要设置其配置文件进行认证。

这里咱们使用root帐户,命令以下所示:

#kubectl认证
export KUBECONFIG=/etc/kubernetes/admin.conf

若是是非root帐户,则须要使用如下命令:

# 若是是非root用户
$ mkdir -p $HOME/.kube
$ cp -i /etc/kubernetes/admin.conf
$HOME/.kube/config$ chown $(id -u):$(id -g) $HOME/.kube/config

 

6.安装flannel网络插件

 这里咱们使用默认的网络组件flannel,相关安装命令以下以下所示:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

命令“kubectl apply”能够用于建立和更新资源,以上命令使用了网络路径的yaml来进行建立flanner:

 

7.检查集群状态

安装完成以后,咱们可使用如下命令来检查集群组件是否运行正常:

kubectl get cs

同时,咱们须要确认相关pod已经正常运行,以下所示:

kubectl get pods -n kube-system -o wide

若是coredns崩溃或者其余pod崩溃,可参考后续章节的常见问题进行解决,请注意确保这些pod正常运行(Running状态)后再添加工做节点。

若是命名空间“kube-system”下的pod均正常运行,那么咱们的主节点已经成功的启动了,接下来咱们来完成工做节点的部署。

 

工做节点部署

这里咱们以Node1节点为例进行安装。开始安装以前,请确认已经完成以前的步骤(设置主机、IP、系统、Docker和防火墙等)。注意主机名、IP等配置不要出现重复和错误。

1.安装 kubelet和kubeadm

kubelet是节点代理,而kubeadm则用于将当前节点加入集群。下面咱们就开始进行安装,

安装命令以下所示:

#配置源
echo '#k8s
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
'>/etc/yum.repos.d/kubernetes.repo
#kubeadm和相关工具包
yum -y install kubelet kubeadm

重启kubelet:

systemctl daemon-reload
systemctl enable kubelet

 

2.拉取相关镜像

请参考上面小节中的《批量拉取k8s相关镜像》,此处略过。

 

3.使用“kubeadm join”将当前节点加入集群

“kubeadm join”命令能够启动一个Kubernetes工做节点而且将其加入到集群,语法以下所示:

kubeadm join [api-server-endpoint] [flags]

使用“kubeadm join”就相对简单多了,这里,咱们回到前面,找到使用“kubeadm init”启动主节点时打印出来的“kubeadm join”脚本进行执行:

kubeadm join 172.16.2.201:6443 --token jx82lw.8ephcufcot5j06v7 \
    --discovery-token-ca-cert-hash sha256:180a8dfb45398cc6c3addd84a61c1bd4364297da1e91611c8c46a976dc12ff17

如未保存该命令或者token已过时,请参考后续章节的常见问题。这里,正常状况下加入成功后以下所示:

加入集成成功以后,k8s就会自动调度Pod,这时咱们仅需耐心等待便可。

 

4.复制admin.conf而且设置配置

为了在工做节点上也能使用kubectl,而kubectl命令须要使用kubernetes-admin来运行,所以咱们须要将主节点中的【/etc/kubernetes/admin.conf】文件拷贝到工做节点相同目录下,这里推荐使用scp进行复制,语法以下所示:

#复制admin.conf,请在主节点服务器上执行此命令
scp /etc/kubernetes/admin.conf {当前工做节点IP}:/etc/kubernetes/admin.conf

具体执行内容以下:

scp /etc/kubernetes/admin.conf 172.16.2.202:/etc/kubernetes/admin.conf
scp /etc/kubernetes/admin.conf 172.16.2.203:/etc/kubernetes/admin.conf

复制时须要输入相关节点的root帐户的密码:

复制完成以后,咱们就能够设置kubectl的配置文件了,以便咱们在工做节点上也可使用kubectl来管理k8s集群:

#设置kubeconfig文件
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

至此,k8s工做节点的部署初步完成。接下来,咱们须要以一样的方式将其余工做节点加入到集群之中。

 

5.查看集群节点状态

集群建立完成以后,咱们能够输入如下命令来查看当前节点状态:

kubectl get nodes

接下来,咱们能够开始按需安装仪表盘以及部署应用了。

 

安装仪表盘

命令以下所示:

#若是使用代理或者使用国际网络,则可跳过此步骤
docker pull mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1
docker tag mirrorgooglecontainers/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
#安装仪表盘
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

建立admin权限:
echo '
---
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' >kubernetes-dashboard-admin.rbac.yaml

kubectl create -f kubernetes-dashboard-admin.rbac.yaml

使用命令获得token:

#获取token名称
kubectl -n kube-system get secret | grep kubernetes-dashboard-admin
#根据名称拿到token
kubectl describe -n kube-system secret/kubernetes-dashboard-admin-token-lphq4

接下来可使用如下命令来访问面板:

kubectl proxy

访问地址以下所示:

http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

这里咱们输入咱们刚才获得的Token,登陆以后以下所示:

咱们能够经过仪表盘来查看节点信息:

 

往期内容连接

相关文章
相关标签/搜索