【K8S】安装Kubernetes 1.14(通过kubeadm)

一、Kubernetes简介

【节点】

Master 主节点

Node    从节点

【组件】

API Server 提供Rest API(增删查改等)

Scheduler  负责Pod调度

Controller Manager 管理控制中心

kubelet 负责管理Pod,类似管理代理

kube-proxy 反向代理,负载均衡器

【其他】

Etcd 存储配置(分布式键值数据库)

kubectl K8S专用命令行工具

Pod K8S基本调度单位(类似豌豆荚)

Container 容器实例(即docker实例)

【K8S】安装Kubernetes 1.14(通过kubeadm)

二、环境准备

Kubernetes支持在物理服务器或虚拟机中运行,本次使用虚拟机准备测试环境,硬件配置信息如表所示:

IP地址

节点角色

CPU

Memory

Hostname

10.1.62.181

master

>=2c

>=2G

k8s-master

10.1.62.182

worker

>=2c

>=2G

k8s-node1

10.1.62.183

worker

>=2c

>=2G

k8s-node2

注:在所有节点上进行如下操作

1.设置主机名hostname,管理节点设置主机名为 k8s-master

在10.1.62.181上执行

hostnamectl set-hostname k8s-master

在10.1.62.182上执行

hostnamectl set-hostname k8s-node1

在10.1.62.183上执行

hostnamectl set-hostname k8s-node2

2.编辑 /etc/hosts 文件,添加域名解析

vi /etc/hosts  10.1.62.181 k8s-master 10.1.62.182 k8s-node1 10.1.62.183 k8s-node2

3.关闭防火墙、selinux和swap

###### 关闭firewalld #####

#查看防火墙状态

systemctl status firewalld

#关闭防火墙

systemctl stop firewalld #禁止防火墙开启自动启动 systemctl disable firewalld

###### 关闭selinux #####

#查看selinux状态 setenforce 0

#查看selinxu配置

vi /etc/selinux/config

#修改配置,设置为关闭 sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

###### 关闭swap #####

#关闭swap分区

swapoff -a

#确认swap已经关闭

free -h

#查看配置

cat /etc/fstab

#永久生效(将swap相关的行注释掉) sed -i "s/.*swap.*/#&/" /etc/fstab

4.配置内核参数,将桥接的IPv4流量传递到iptables的链

#制作配置文件

(官方的说法是这样的:在shell脚本中(bash编程),<<EOF表示后续的输入作为子命令或子Shell的输入,直到遇到EOF为止,再返回到主Shell。而EOF可以换成任何其他字符都可以)

cat > /etc/sysctl.d/k8s.conf  <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF #使配置生效 sysctl --system

5. 配置国内源

配置国内yum源

yum install -y wget mkdir /etc/yum.repos.d/bak && mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo yum clean all && yum makecache -y

异常处理:当无法正确获取版本时会发生执行失败(观察异常路径是$releasever获取不正确)

【K8S】安装Kubernetes 1.14(通过kubeadm)

解决方案:回滚repo配置,安装centos-release,然后重试(安装出现版本冲突)

改用直接替换所有*.repo文件中的$releasever变量,直接替换为7

配置国内Kubernetes源

cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

配置 docker 源

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

三、软件安装

注:在所有节点上进行如下操作

1.安装docker

#安装docker(为了更好的兼容性,明确选定版本)

yum install -y docker-ce-18.06.1.ce-3.el7

#启动docker服务 && 设置开机启动  systemctl start docker && systemctl enable docker

#查看安装结果 docker --version

docker服务为容器运行提供计算资源,是所有容器运行的基本平台。

2.安装kubeadm、kubelet、kubectl (为了更好的兼容性,明确选定版本)

yum install -y kubelet-1.14.10-0.x86_64 kubeadm-1.14.10-0.x86_64 kubectl-1.14.10-0.x86_64 systemctl enable kubelet

Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。

四、部署master 节点

注:在master节点上进行如下操作

1.在master进行Kubernetes集群初始化

kubeadm init --kubernetes-version=1.14.10 \ --apiserver-advertise-address=10.1.62.181 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=10.1.0.0/16 \ --pod-network-cidr=10.244.0.0/16

定义POD的网段为: 10.244.0.0/16, api server地址就是master本机IP地址。

这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过–image-repository指定阿里云镜像仓库地址,很多新手初次部署都卡在此环节无法进行后续配置。

集群初始化成功后返回如下信息:

记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。(此时先不执行)

kubeadm join 10.1.62.181:6443 --token 1tm5wy.yyf593p6cceaayw8 \

    --discovery-token-ca-cert-hash sha256:571c1252349a84c5ae0a39cd23151da1598ef63c33f2607ba76f32cfb298d94c

2.配置kubectl工具

创建执行命令的配置

mkdir -p /root/.kube cp /etc/kubernetes/admin.conf /root/.kube/config #确认项中输入y

测试命令执行 kubectl get nodes kubectl get cs

3.部署flannel网络

配置mater机器上的hosts

vi /etc/hosts   #文件添加一条

199.232.68.133 raw.githubusercontent.com

部署网络

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

五、部署node节点

注:在所有node节点上进行如下操作

执行如下命令,使所有node节点加入Kubernetes集群(此命令为集群初始化时(kubeadm init)返回结果中的内容)

kubeadm join 10.1.62.181:6443 --token 1tm5wy.yyf593p6cceaayw8 \

    --discovery-token-ca-cert-hash sha256:571c1252349a84c5ae0a39cd23151da1598ef63c33f2607ba76f32cfb298d94c

检查加入情况 kubectl get nodes

六、集群状态检测

注:在master节点上进行如下操作

1.在master节点输入命令检查集群状态,返回如下结果则集群状态正常

#>kubectl get nodes NAME         STATUS   ROLES    AGE     VERSION

k8s-master   Ready    master   23m     v1.14.10

k8s-node1    Ready    <none>   5m16s   v1.14.10

k8s-node2    Ready    <none>   59s     v1.14.10

重点查看STATUS内容为Ready时,则说明集群状态正常。

2.创建Pod以验证集群是否正常

kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort kubectl get pod,svc

七、部署Dashboard

注:在master节点上进行如下操作

1.创建Dashboard的yaml文件

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

使用如下命令或直接手动编辑kubernetes-dashboard.yaml文件

sed -i "s/k8s.gcr.io/loveone/g" kubernetes-dashboard.yaml sed -i "/targetPort:/a      nodePort: 30001 \   type: NodePort" kubernetes-dashboard.yaml

手动编辑kubernetes-dashboard.yaml文件时,需要修改两处内容,首先在Dashboard Deployment部分修改Dashboard镜像下载链接,由于默认从官方社区下载,而不“*”是无法下载的,因此修改为:image: loveone/kubernetes-dashboard-amd64:v1.10.1

此外,需要在Dashboard Service内容加入nodePort: 30001和type: NodePort两项内容,将Dashboard访问端口映射为节点端口,以供外部访问

其实最匹配的版本是

dashboard  version  v2.0.0-beta1

Kubernetes version 1.14

https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta1/aio/deploy/recommended.yaml

2.部署Dashboard

kubectl create -f kubernetes-dashboard.yaml

3.创建完成后,检查相关服务运行状态

kubectl get deployment kubernetes-dashboard -n kube-system kubectl get pods -n kube-system -o wide kubectl get services -n kube-system netstat -ntlp|grep 30001

4.在Firefox浏览器输入Dashboard

访问地址:https://10.1.62.181:30001

5.查看访问Dashboard的认证令牌

kubectl create serviceaccount  dashboard-admin -n kube-system kubectl create clusterrolebinding  dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret|grep dashboard-admin |awk '{print$1}')

查看ca的命令

cat /etc/kubernetes/admin.conf

【K8S】安装Kubernetes 1.14(通过kubeadm)

6.使用输出的token登录Dashboard

【K8S】安装Kubernetes 1.14(通过kubeadm)

认证通过后,登录Dashboard首页如图

【K8S】安装Kubernetes 1.14(通过kubeadm)

搭建镜像仓库

#>docker run -d -p 5001:5000 --restart=always  --name registry registry:2

查看仓库内容 localhost:5001/v2/_catalog

发布容器应用时,img的地址,直接写这个仓库即可

异常排查:

1. docker启动失败,systemctl start docker.service

Job for docker.service canceled.

【K8S】安装Kubernetes 1.14(通过kubeadm)

2. docker安装后,docker命令不识别

k8s-master:/root# docker -version

-bash: docker: command not found

异常原因:旧版docker卸载不完全导致

处理方案:彻底卸载后,重新安装即可

卸载安装包

(yum list installed |grep docker中的都要卸载掉 yum remove -y xxx yyy zzz,例如yum remove -y containerd.io.x86_64 docker-ce.x86_64 docker-ce-cli.x86_64)

卸载数据目录

rm -rf /var/lib/docker

3. 部署flannel网络时,无法下载kube-flannel.yml

wget kube-flannel.yml的时候显示连接失败

是因为网站被墙了,建议在/etc/hosts文件添加一条

199.232.68.133 raw.githubusercontent.com

就可以正常下载了。

下载完成后创建并查看

4. 【chrome】访问https地址提示不安全 

当前页面点击任意空白处,直接键盘输入字符 thisisunsafe 即可解决。

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

【K8S】安装Kubernetes 1.14(通过kubeadm)

上一篇:k8s核心概念Ingress


下一篇:Kubernetes(K8s) kubectl proxy 常用命令