centos7使用kubeadm安装Kubernetes 1.18.3
一、Kubernetes简介
Kubernetes(k8s)是自动化容器操作的开源平台,这些操作包括部署,调度和节点集群间扩展。如果你曾经用过Docker容器技术部署容器,可以将Docker看成Kubernetes内部使用的低级别组件。 Kubernetes不仅支持Docker,还支持Rocket,这是另一种容器技术。使用Kubernetes可以实现如下功能:
- 自动化容器的部署和复制;
- 随时扩展或收缩容器规模;
- 将容器组织成组,并且提供容器间的负载均衡;
- 很容易地升级应用程序容器的新版本;
- 提供容器弹性,如果容器失效就替换它等。
下图为kubernetes各个组件的作用:

二、环境准备
Kubernetes支持在物理服务器或虚拟机中运行,本次使用虚拟机测试环境,CPU需要大于2核,内存需大于2G,关闭swap。
名称 | IP地址 | 主机名 | 节点角色 |
---|---|---|---|
10.168.1.160 | master | master | master |
10.168.1.161 | worker | node1 | worker |
10.168.1.162 | worker | node2 | worker |
三、基础操作
设置主机名、主机名解析、内核参数、关闭防火墙、selinux、swap、设置yum源
master环境:
1、设置主机名,管理节点设置主机名为master
[root@master ~]# hostnamectl set-hostname master
[root@master ~]# su -
2、编辑hosts文件,设置主机名解析
[root@master ~]# vim /etc/hosts //添加
10.168.1.160 master
10.168.1.161 node1
10.168.1.162 node2
3、需要先关闭防火墙、selinux和swap。
[root@master ~]# systemctl stop firewalld
[root@master ~]# systemctl disable firewalld
[root@master ~]# setenforce 0
setenforce: SELinux is disabled
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# swapoff -a
[root@master ~]# sed -i 's/.*swap.*/#&/' /etc/fstab
4、配置内核参数,将桥接的IPv4流量传递到iptables的链
[root@master ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
[root@master ~]# sysctl --system
5、配置阿里云的kubernetes的yum源
[root@master ~]# yum -y install wget
[root@master ~]# cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[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
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
[root@master ~]# yum clean all
[root@master ~]# yum repolist
node环境
备注:(node1节点和node2节点都要配置,配置相同)这里只贴出node1
1、设置主机名,管理节点设置主机名为node1
[root@node1 ~]# hostnamectl set-hostname node1
[root@node1 ~]# su -
2、设置Host解析,编辑/etc/hosts文件,添加域名解析。
[root@node1 ~]# vim /etc/hosts
10.168.1.160 master
10.168.1.161 node1
10.168.1.162 node2
3、关闭防火墙、selinux和swap。
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node1 ~]# swapoff -a
[root@node1 ~]# sed -i 's/.*swap.*/#&/' /etc/fstab
4、配置内核参数,将桥接的IPv4流量传递到iptables的链
[root@node1 ~]# cat > /etc/sysctl.d/k8s.conf <<EOF
> net.bridge.bridge-nf-call-ip6tables = 1
> net.bridge.bridge-nf-call-iptables = 1
> EOF
[root@node1 ~]# sysctl --system
5、配置阿里云的kubernetes的yum源
[root@node1 ~]# yum -y install wget
[root@master ~]# cat >/etc/yum.repos.d/kubernetes.repo <<EOF
[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
[root@master ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
四、环境部署
docker服务安装、kubernetes服务安装
master节点
1、docker-ce安装部署
卸载系统自带docker服务
[root@master ~]# yum -y remove docker docker-common docker-selinux docker-engine
查看可安装的docker-ce版本

安装docker-ce并启动
[root@master ~]# yum install docker-ce -y
[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker
2、kubelet、kubeadm、kubectl安装
[root@master ~]# yum install kubelet -y
[root@master ~]# yum install kubeadm -y
[root@master ~]# yum install kubectl -y
[root@master ~]# systemctl enable kubelet
说明:Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。
node节点
1、docker-ce安装
查看当前docker版本并卸载
[root@node1 ~]# yum -y remove docker docker-common docker-selinux docker-engine
1、安装Docker-ce
[root@master ~]# yum install docker-ce -y
[root@master ~]# systemctl start docker
[root@master ~]# systemctl enable docker
2、kubelet、kubeadm、kubectl安装
[root@node1 ~]# yum install kubelet kubeadm kubectl -y
[root@node1 ~]# systemctl enable kubelet
Kubelet负责与其他节点集群通信,并进行本节点Pod和容器生命周期的管理。Kubeadm是Kubernetes的自动化部署工具,降低了部署难度,提高效率。Kubectl是Kubernetes集群管理工具。
五、节点部署
master和node节点初始化操作
master节点
1、在master进行Kubernetes集群初始化。
[root@master ~]# kubeadm init --kubernetes-version=1.18.3 \ --apiserver-advertise-address=10.168.1.160 \ --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,apiserver地址就是master本机IP地址。
这一步很关键,由于kubeadm 默认从官网k8s.grc.io下载所需镜像,国内无法访问,因此需要通过--image-repository指定阿里云镜像仓库地址,很多新手初次部署都卡在此环节无法进行后续配置。
集群初始化成功后返回如下信息:

记录生成的最后部分内容,此内容需要在其它节点加入Kubernetes集群时执行。
2、配置kubectl工具
[root@master ~]# mkdir -p /root/.kube
[root@master ~]# cp /etc/kubernetes/admin.conf /root/.kube/config
[root@master ~]# kubectl get nodes
[root@master ~]# kubectl get cs

3、部署flannel网络
[root@master ~]# kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/a70459be0084506e4ec919aa1c114638878db11b/Documentation/kube-flannel.yml

node节点
注:在node1节点上进行如下操作
执行如下命令,使node1节点加入Kubernetes集群
[root@node1 ~]# kubeadm join 10.168.1.160:6443 --token 2eh86u.1xr1cqqwmxj9576k --discovery-token-ca-cert-hash sha256:6edb6229ca8d01edd4cf2973b197ba70824094a8bc81c111126651e9b1c5f5db
此命令为集群初始化时(kubeadm init)返回结果中的内容。

此命令为集群初始化时(kubeadm init)返回结果中的内容。
#默认token的有效期为24小时,当过期之后,该token就不可用了。解决方法如下:
#重新生成新的token,在master端执行kubeadm token create --print-join-command
六、集群状态检测
检查获取的节点信息、创建pod
master节点操作
1、在master节点输入命令检查集群状态,返回如下结果则集群状态正常。
[root@master ~]# kubectl get nodes

重点查看STATUS内容为Ready时,则说明集群状态正常。
2、创建Pod以验证集群是否正常。
[root@master ~]# kubectl create deployment nginx --image=nginx
[root@master ~]# kubectl expose deployment nginx --port=80 --type=NodePort
[root@master ~]# kubectl get pod,svc

七、部署K8S的UI
master节点操作
1、创建Dashboard的yaml文件
[root@master ~]# wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.1/aio/deploy/recommended.yaml
[root@master ~]# sed -i 's/k8s.gcr.io/cnbugs/g' recommended.yaml
# 修改端口号
[root@master ~]# sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30001\n\ \ type: NodePort' recommended.yaml
2、部署Dashboard
[root@master ~]# kubectl create -f recommended.yaml
3、创建完成后,检查相关服务运行状态
[root@master ~]# kubectl get pods -n kube-system -o wide

[root@master ~]# kubectl get services -n kube-system

查看服务监听
[root@master ~]# netstat -ntlp|grep 30001

4、在Firefox浏览器输入Dashboard访问地址:https://10.168.1.160:30001

5、查看访问Dashboard的认证令牌
[root@master ~]# kubectl create serviceaccount dashboard-admin -n kube-system
[root@master ~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
[root@master ~]# kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
输出token值

6、复制输出的token登录Dashboard
#用火狐浏览器访问https://10.168.1.160:30001证书问题,只能通过火狐浏览器访问)
认证通过后,登录Dashboard首页如图

至此,Kubernetes安装完成。
我的token
eyJhbGciOiJSUzI1NiIsImtpZCI6InJaeFdIQ3lLRm0xVkVodVR2UDNncm5sbXUydFF5ZHpHUXNEMElFU3hXdmMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tOWZ2YjkiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiMjhlZDUxYWYtNGVlMi00MGUzLWE5MGEtMGM4MTc1MDRhZTIxIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmUtc3lzdGVtOmRhc2hib2FyZC1hZG1pbiJ9.iZYgMgT6rskE7JHnzvtToZaJssdcpeXYxBioDo_snt8YmEyfd8Hfiqh6BQSLdRfW3L6fFB3UJRILIIcNj9pZRiCKrIEfQ7oytN2mY9ZlKcwyz2m1afZavIw9vlgjigSafsUdyorgPgjU4omy_gmDLaqm6KPnqwHgxo5AtYkrlW0HuGarAjlVUOkjnOfGyYONB_T68Xm--d5KeMQihmC1uUyP0R9y5hkviLcdeNWD8mNX8ulnCrPCXSnbTDMrOb8YsQ0bHLSJKCCwyn6rS4XXryNYTPmT9FLLvrobXsPbJoEjLHbepZ8YUvXBVCEGKjiNmRygEqnANIdci9ksG--TPA
老铁们如果在安装过程中出现任何问题可以加群讨论哦,下面附上二维码
