centos7基于kubeadm安装部署Kubernetes (1.15.2)集群

网友投稿 187 2022-10-13

centos7基于kubeadm安装部署Kubernetes (1.15.2)集群

一、什么是 Kubernetes

Kubernetes 是 Google (谷歌内部:Borg)开源的容器集群管理系统,其提供应用部署、维护、 扩展机制等功能,利用 Kubernetes 能方便地管理跨机器运行容器化的应用,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。它既是一款容器编排工具,也是全新的基于容器技术的分布式架构领先方案。

二、 Kubernetes架构和组件

K8S集群中有管理节点与工作节点两种类型。

1)架构

k8s集群的管理节点,负责管理集群,提供集群的资源数据访问入口。拥有Etcd存储服务(可选),运行Api Server进程,Controller Manager服务进程及Scheduler服务进程,关联工作节点Node。Kubernetes API server提供HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增、删、改、查等操作的唯一入口。也是集群控制的入口进程;Kubernetes Controller Manager是Kubernetes所有资源对象的自动化控制中心;Kubernetes Schedule是负责资源调度(Pod调度)的进程工作节点是Kubernetes集群架构中真正运行Pod的节点,为容器和Pod提供计算资源,Pod及容器全部运行在工作节点上,工作节点通过kubelet服务与管理节点通信以管理容器的生命周期,并与集群其他节点进行通信。

2)核心组件

三、基础环境准备

环境配置信息如下(本次采用虚拟机作为测试环境):

IP地址 主机名 系统 内核版本 CPU 内存
192.168.100.6 master01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.7 node01.cluster.k8 CentOS 7.6 5.2.6 4c 4G
192.168.100.8 node02.cluster.k8 CentOS 7.6 5.2.6 4c 4G

1.设置主机名hostname,如在master节点上执行:

[root@master01 ~]# hostnamectl set-hostname master01.cluster.k8

可以按照此方式设置其它主机的主机名

2.添加本机的域名解析,修改master和node节点上的/etc/hosts文件,执行如下命令:

[root@master01 ~]# cat <>/etc/hosts 192.168.100.6 master01.cluster.k8 192.168.100.7 node01.cluster.k8 192.168.100.8 node02.cluster.k8 EOF

3.关闭防火墙、selinux和swap

1)关闭防火墙

[root@master01 ~]# systemctl stop firewalld [root@master01 ~]# systemctl disable firewalld

2)禁用selinux

[root@master01 ~]# setenforce 0 #临时生效 [root@master01 ~]# sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config #永久生效(需要重启服务器)

3)关闭交换分区

[root@master01 ~]# swapoff -a [root@master01 ~]# sed -i 's/.*swap.*/#&/' /etc/fstab

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

[root@master01 ~]# cat > /etc/sysctl.d/k8s.conf <

注意:如果配置时出现No such file or directory,简单来说就是执行一下

[root@master01 ~]# modprobe br_netfilter

5.安装ntpdate,保证集群时间同步

[root@master01 ~]# yum install -y ntpdate [root@master01 ~]# ntpdate -u ntp.aliyun.com #可以添加定时任务,进行时钟定时同步 [root@master01 ~]# crontab -e */10 * * * * /usr/sbin/ntpdate ntp.aliyun.com;/sbin/hwclock -w;

6.其他软件安装

[root@master01 ~]#yum install wget

7.配置yum源

1)配置阿里云的Kubernetes源

[root@master01 ~]#cat < /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.gpghttps://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF

2)配置docker源

[root@master01 ~]#wget -O /etc/yum.repos.d/docker-ce.repo

四、安装部署

1、安装docker

[root@master01 ~]#yum install -y yum-utils device-mapper-persistent-data lvm2 # 列出Docker版本 [root@master01 ~]#yum list docker-ce --showduplicates | sort -r # 安装指定版本 [root@master01 ~]#yum install docker-ce-18.06.3 [root@master01 ~]#systemctl enable docker && systemctl start docker

注意,如果测试环境没有公网ip的情况下,为了保证docker能够正常去拉取镜像,这时就需要为docker配置代理,配置方式如下:

1)直接修改/etc/sysconfig/docker,添加如下内容 (不建议这种方式,这种方式在docker升级或者一些更新操作的时候会导致失效)

HTTP_PROXY="HTTP_PROXY HTTPS_PROXY

2)为docker服务创建一个systemd的目录,并创建docker proxy的代理配置文件,该方式配置后会一直生效

[root@master01 ~]# mkdir -p /etc/systemd/system/docker.service.d

创建/etc/systemd/system/docker.service.d/~]#vim /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY="HTTPS_PROXY="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporation.com"

重新加载配置:

[root@master01 ~]#systemctl daemon-reload

重新启动docker

[root@master01 ~]#systemctl restart docker

2、在三个节点分别安装kubeadm、kubelet、kubectl

[root@master01 ~]# yum install -y kubeadm、kubelet、kubectl [root@master01 ~]# systemctl enable kubelet

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

3、部署master管理节点

[root@master01 ~]# kubeadm init --kubernetes-version=1.15.2 \ --apiserver-advertise-address=192.168.100.6 \ --image-repository registry.aliyuncs.com/google_containers \ --service-cidr=100.64.0.0/10 \ --pod-network-cidr=10.244.0.0/16

注意:kubeadm在部署的过程中,默认是从k8s.grc.io下载镜像,国内访问会有问题,所以建议通过--image-repository自己来指定国内的镜像仓库,这里使用阿里云的镜像仓库如果集群初始化成功,则会返回如下信息

kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

这些信息是用于将其它node节点加入到Kubernetes集群,在其它node节点上直接执行上边这条命令信息,即可将节点加入到集群。

4、配置集群的管理工具kubectl

[root@master01 ~]#mkdir -p /root/.kube cp /etc/kubernetes/admin.conf /root/.kube/config

注意:需要将master节点的/root/.kube/config同时也拷贝到其它node节点,否则在通过kubectl查看集群资源信息时会出现The connection to the server localhost:8080 was refused - did you specify the right host or port?错误。如果将master节点的/root/.kube/config拷贝到其它node节点后,在其它node节点通过kubectl获取相关集群资源对象信息时出现Unable to connect to the server: Forbidden,请检查一下节点是否配置了~]#kubeadm join 192.168.100.6:6443 --token v***ht.38oa8f6snaaiycga --discovery-token-ca-cert-hash sha256:4930dc9796565dd23f221ad7336afee37a7f4790c7487ded6ca26efffae3058a

此时查看集群的节点信息:

[root@master01 ~]#kubectl get nodes NAME STATUS ROLES AGE VERSION node01.cluster.k8 NotReady master 5m v1.15.2 node02.cluster.k8 NotReady 1m v1.15.2 node03.cluster.k8 NotReady 1m v1.15.2

可以看到集群节点的状态现在还处于NotReady状态,应为现在还没有安装网络插件,主流的网络插件有:flannel、calico、canel等

6、部署flannel网络

[root@master01 ~]#kubectl apply -f ~]#kubectl get nodes NAME STATUS ROLES AGE VERSION node01.cluster.k8 Ready master 15m v1.15.2 node02.cluster.k8 Ready 10m v1.15.2 node03.cluster.k8 Ready 10m v1.15.2

这时候我们就可以通过kubectl工具去创建Pod了。

7、为了管理方便,可以为集群部署一个Dashboard

[root@master01 ~]#kubectl apply -f dashboard 的docker镜像默认是从k8s.grc.io下载镜像,国内可能无法访问,所以可以先下载kubernetes-dashboard.yaml到本地,然后修改 docker镜像的仓库地址为阿里云仓库地址。

[root@master01 ~]#wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml #替换镜像仓库 [root@master01 ~]#sed -i 's/k8s.gcr.io/registry.aliyuncs.com/google_containers/g' kubernetes-dashboard.yaml

第二:在kubernetes-dashboard.yaml中,关于 kubernetes-dashboard的服务(Service)的定义如下:

kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: ports: - port: 443 targetPort: 8443 selector: k8s-app: kubernetes-dashboard

默认没有指定spec.type,所以默认类型为ClusterIP,所以导致结果为kubernetes-dashboard服务没有映射本地端口,为能够通过节点IP+端口号的方式访问dashboard,则需要对kubernetes-dashboard.yaml做如下修改:

[root@master01 ~]#sed -i '/targetPort:/a\ \ \ \ \ \ nodePort: 30443\n\ \ type: NodePort' kubernetes-dashboard.yaml #修改后,kubernetes-dashboard的服务(Service)的定义如下: kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kube-system spec: ports: - port: 443 targetPort: 8443 nodePort: 30443 type: NodePort selector: k8s-app: kubernetes-dashboard

[root@master01 ~]#kubectl delete -f kubernetes-dashboard.yaml [root@master01 ~]#kubectl apply -f kubernetes-dashboard.yaml

建议使用火狐浏览器Firefox访问Dashboard的地址:https://192.168.100.6:30443

8、获取登录Dashboard的token(令牌):

#创建一个用于Dashboard访问集群的服务账号dashboard-admin [root@master01 ~]#kubectl create serviceaccount dashboard-admin -n kube-system #将服务账号dashboard-admin和默认的集群角色cluster-admin绑定 [root@master01 ~]#kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin #获取token [root@master01 ~]#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

9、使用token登录Dashboard

10、尝试部署一个pod,并通过Dashboard进行查看

[root@master01 ~]#kubectl create deployment my-nginx --image=nginx

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AWS 数据分析服务(十)
下一篇:Java并发编程之对象的组合
相关文章

 发表评论

暂时没有评论,来抢沙发吧~