测试开发技术网站
博客
设计
设计
开发
Python
测试
unittest
运维
Linux基础应用
CI/CD
CI/CD
数据库
数据库
云计算
云计算
云原生
云原生
爬虫
爬虫
数据分析
数据分析
人工智能
人工智能
登录
注册
Kubernetes----Kubernetes集群环境搭建
收藏本文
作者:redrose2100 类别: 日期:2022-05-13 07:36:16 阅读:1724 次 消耗积分:0 分
# 一、安装简介 ## 1.1 集群类型 * 一主多从:一台Master节点和多台Node节点,搭建简单,但是又单机故障风险,适合用于测试环境 * 多主多从:多台Master节点和多台Node节点,搭建麻烦,安全性高,适合用于生产环境 ![](/static/upload/20220513_084404.png) ## 1.2 安装方式 * mminikube:一个用于快速搭建单节点kubernetes的工具 * kubeadm:一个用于快速搭建kubernetes集群的工具 * 二进制包:从官网下载每个组件的二进制包,依次去安装,安装复杂,但对于理解kubernetes组件更加有效 ### 二、使用kubeadm工具方式安装一主两从类型的kubernetes集群 ## 2.1 主机规划 | 节点 | IP地址 | 操作系统 | 配置| |:----|:----|:----|:----| |Master|192.168.2.150|CentOS7.9|2Cpu2G内存40G硬盘| |Node1|192.168.2.151|CentOS7.9|2Cpu2G内存40G硬盘| |Node2|192.168.2.152|CentOS7.9|2Cpu2G内存40G硬盘| ## 2.2 服务器初始化配置 * (1)修改主机名 ```bash hostnamectl set-hostname master # 在192.168.2.150上执行 hostnamectl set-hostname node1 # 在192.168.2.151上执行 hostnamectl set-hostname node2 # 在192.168.2.152上执行 ``` 修改完成后执行hostname,结果如下: ![](/static/upload/20220513_084500.png) * (2)查看Linux系统版本,CentOS要求版本要大于等于7.5版本 如下,均满足 ![](/static/upload/20220513_084529.png) * (3)配置地址解析 在 /etc/hosts 文件中增加以下内容: ```bash 192.168.2.150 master 192.168.2.151 node1 192.168.2.152 node2 ``` 结果如下: ![](/static/upload/20220513_084556.png) 配置完成后,在各个节点上ping master,ping node1,ping node2均为ping通状态说明配置OK * (4)时间同步 在三台服务器都执行如下命令 ```bash systemctl start chronyd systemctl enable chronyd ``` 若未安装chrony,则使用如下命令安装 ```bash yum instal -y chrony ``` 配置完成后使用date命令可以查看到三台服务器时间完全同步 ![](/static/upload/20220513_084635.png) * (5)禁用IPtable和firewall(测试环境可以直接禁掉,生产环境需要慎重考虑) 在三台服务器上执行如下命令: ```bash systemctl stop firewalld systemctl disable firewalld systemctl stop iptables systemctl disable iptables ``` * (6)禁用selinux 通过getenforce命令可以查看状态,默认情况下是开启的 关闭selinux需要修改文件,vi /etc/selinux/config ,然后将 SELINUX=enforcing 修改为SELINUX=disabled,如下: ![](/static/upload/20220513_084659.png) 然后需要重启系统才会生效,这里暂时先不重启,待后续都配置完成后统一重启 * (7)禁用swap分区 在三台服务器进行编辑/etc/fstab 文件,vi /etc/fstab 然后将 /dev/mapper/centos-swap swap 这一行注释掉,如下: ![](/static/upload/20220513_084718.png) 这里也需要重启才会生效,同样暂时不重启,待最后统一重启 * (8)修改linux内核参数 在三台服务器上创建 /etc/sysctl.d/kubernetes.conf文件,即vi /etc/sysctl.d/kubernetes.conf,文件中增加如下内容: ```bash net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip.forward = 1 ``` 执行如下命令使上述配置生效 ```bash sysctl -p ``` 然后执行如下命令加载一个模块 ```bash modprobe br_netfilter ``` 通过执行如下命令来检查是否生效 ```bash lsmod | grep br_netfilter ``` 如下,表示已经配置OK ![](/static/upload/20220513_084746.png) * (9)配置ipvs功能 在三台服务器上执行如下命令: ```bash yum install -y ipset ipvsadmin ``` 创建 /etc/sysconfig/modules/ipvs.modules 文件,即vi /etc/sysconfig/modules/ipvs.modules内容如下: ```bash #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack_ipv4 ``` 给新建文件增加可执行权限 ```bash chmod +x /etc/sysconfig/modules/ipvs.modules ``` 然后执行上述脚本文件 ```bash bash /etc/sysconfig/modules/ipvs.modules ``` 通过如下命令可以查看上述配置是否OK ```bash lsmod|grep ip_vs ``` 如下,表示都已经配置OK ![](/static/upload/20220513_084813.png) (10)至此,三台服务器的基础配置已经配置完成,此时可以重启一下三台服务器 重启完成后,可以通过getenforce命令查看selinux是否生效,如下表示已经生效 ![](/static/upload/20220513_084833.png) 然后通过 free -m查看,如下swap位置均为0表示swap分区已经成功关闭 ![](/static/upload/20220513_084854.png) ## 2.3 安装Docker * (1)配置阿里云的docker镜像源 ```bash wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo yum clean all yum makecache ``` * (2)查看docker的版本 ```bash yum list docker-ce --showduplicates ``` 结果如下,这里选择20.10.9-3.el7 ![](/static/upload/20220513_084917.png) * (3)安装docker ```bash yum install -y --setopt=obsolutes=0 docker-ce-20.10.9-3.el7 ``` 创建docker配置文件夹 ```bash mkdir /etc/docker ``` 创建 /etc/docker/daemon.json文件,即vi /etc/docker/daemon.json,内容如下: ```json { "exec-opts":["native.cgroupdriver=systemd"], "registry-mirrors":["https://ooe7wn09.mirror.aliyuncs.com"] } ``` 这里阿里云镜像加速地址可以通过登录阿里云平台,在【容器服务】-【容器镜像服务】-【镜像工具】-【镜像加速器】中找到自己的镜像加速地址 ![](/static/upload/20220513_084946.png) 然后执行systemctl start docker 即可启动docker,使用systemctl status docker查看docker状态 如下: ![](/static/upload/20220513_085012.png) 通过docker version 可以查看docker的版本 ![](/static/upload/20220513_085033.png) 至此docker安装已经完成,此时可以把docker设置为开机自启动 ```bash systemctl enable docker ``` ## 2.4 安装kubernetes组件 * (1)配置阿里云的kubernetes镜像源 vi /etc/yum.repos.d/kubernetes.repo ```bash [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg ``` 然后执行如下命令 ```bash yum clean all yum makecache ``` * (2)安装kubeadm,kubelet,kubectl ```bash yum install -y --setopt=obsolutes=0 kubeadm-1.21.10-0 kubelet-1.21.10-0 kubectl-1.21.10-0 ``` * (3)配置kubelet配置文件 vi /etc/sysconfig/kubelet 然后编写内容如下: ```bash KUBELET_CGROUP_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" ``` * (4)设置kubelet的开机自启动 ```bash systemctl enable kubelet ``` ## 2.5 安装集群 * (1)准备集群镜像 首先通过kubeadm config images list 命令查看需要的镜像,比如这里是: ```bash k8s.gcr.io/kube-apiserver:v1.21.10 k8s.gcr.io/kube-controller-manager:v1.21.10 k8s.gcr.io/kube-scheduler:v1.21.10 k8s.gcr.io/kube-proxy:v1.21.10 k8s.gcr.io/pause:3.4.1 k8s.gcr.io/etcd:3.4.13-0 k8s.gcr.io/coredns/coredns:v1.8.0 ``` 因为k8s官网在国外,这里需要先从阿里云上下载,然后通过修改tag值的方式改为和k8s官网一样的,然后再进行安装 在三台服务器上执行如下命令 ```bash images=(kube-apiserver:v1.21.10 kube-controller-manager:v1.21.10 kube-scheduler:v1.21.10 kube-proxy:v1.21.10 pause:3.4.1 etcd:3.4.13-0 coredns:v1.8.0) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName k8s.gcr.io/$imageName docker rmi registry.cn-hangzhou.aliyuncs.com/google_containers/$imageName done ``` 执行完成后通过docker images 即可查看已经下载好的docker镜像, 这里还需要执行如下命令做一次修改 ```bash docker tag k8s.gcr.io/coredns:v1.8.0 k8s.gcr.io/coredns/coredns:v1.8.0 ``` 如下所示,即已经跟k8s官网的一致了 ![](/static/upload/20220513_085146.png) * (2)集群初始化 至此,所有上述的执行命令都是在三台服务器上执行的,这里执行集群初始化的命令注意只需要在master节点执行即可 ```bash kubeadm init --kubernetes-version=v1.21.6 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address=192.168.2.150 ``` 如下,表示集群初始化成功 ![](/static/upload/20220513_085209.png) 根据上图提示,执行如下三条命令(注意,以下三条命令从上述回显中拷贝) ```bash mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config ``` 根据提示,如果是root用户,需要再执行如下命令(注意,同样从上述回显中拷贝) ```bash export KUBECONFIG=/etc/kubernetes/admin.conf ``` 此时在主节点可以查看当前集群中的节点信息,如下,此时只有master节点 ```bash [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 3m13s v1.21.6 [root@master ~]# ``` 然后还是根数上述回显提示,分别将如下命令(注意此命令同样也是从上述回显中拷贝)在另外两个node节点上执行 ```bash kubeadm join 192.168.2.150:6443 --token la4re6.kxloa60jkydvl8nv \ --discovery-token-ca-cert-hash sha256:e0bfa2e1f9adf734d415567d95f97db1ec97883ffd8402712b2960cd1f30d0fc ``` 然后回到master节点继续查询此时的节点信息,如下,此时已经有两个节点了 ```bash [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master NotReady control-plane,master 7m7s v1.21.6 node1 NotReady
16s v1.21.6 node2 NotReady
7s v1.21.6 [root@master ~]# ``` #### 如何在node节点执行kubectl命令 如果想在node节点行执行kubectl命令,需要将master节点的 $Home/.kube 文件拷贝到node节点的home目录下 执行如下命令进行配置文件的拷贝 ```bash # 拷贝到node1节点 scp -r ~/.kube node1:~/ # 拷贝到node2节点 scp -r ~/.kube node2:~/ ``` 然后到node节点就可以执行kubectl命令了 ## 2.6 安装网络插件 这里的操作只需要在master上操作即可 下载yml文件并使用此文件执行 ```bash wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml kubectl apply -f kube-flannel.yml ``` 稍等一会,再次在master节点上查询节点状态,如下status为Ready表示此时已经OK了 ```bash [root@master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION master Ready control-plane,master 21m v1.21.6 node1 Ready
14m v1.21.6 node2 Ready
14m v1.21.6 [root@master ~]# ``` ## 2.7 部署Nginx服务测试集群是否已部署成功 * (1)部署nginx 在master节点执行如下命令部署Nginx ```bash kubectl create deployment nginx --image=nginx:1.14-alpine ``` * (2)暴露端口 在master节点执行如下命令暴露80端口 ```bash kubectl expose deployment nginx --port=80 --type=NodePort ``` * (3)查看服务状态 在master节点执行如下命令: ```bash kubectl get pods kubectl get service ``` 执行结果如下: ```bash [root@master ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-65c4bffcb6-jdd64 1/1 Running 0 2m41s [root@master ~]# kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1
443/TCP 34m nginx NodePort 10.97.150.219
80:30483/TCP 2m6s [root@master ~]# ``` 此时就可以通过master的ip加上这里的端口号30483进行访问了,如下说明k8s的集群已经部署成功并且可以使用了 ![](/static/upload/20220513_085329.png) # 三、安装dashboard ## 3.1 下载yaml文件并安装 从Kubernetes/dashboard的github地址下载yaml文件如下: https://github.com/kubernetes/dashboard/blob/master/aio/deploy/recommended.yaml 然后编辑yaml文件,增加如下两行,即给Service设置类型为NodePort,并且设置其值为30080 ![](/static/upload/20220513_085355.png) 然后使用如下命令创建 ```bash [root@master ~]# kubectl apply -f recommended.yaml namespace/kubernetes-dashboard created serviceaccount/kubernetes-dashboard created service/kubernetes-dashboard created secret/kubernetes-dashboard-certs created secret/kubernetes-dashboard-csrf created secret/kubernetes-dashboard-key-holder created configmap/kubernetes-dashboard-settings created role.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrole.rbac.authorization.k8s.io/kubernetes-dashboard created rolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created clusterrolebinding.rbac.authorization.k8s.io/kubernetes-dashboard created deployment.apps/kubernetes-dashboard created service/dashboard-metrics-scraper created deployment.apps/dashboard-metrics-scraper created [root@master ~]# ``` 如下命令即查看pod和service已经启动OK了 ```bash [root@master ~]# kubectl get pod,svc -n kubernetes-dashboard NAME READY STATUS RESTARTS AGE pod/dashboard-metrics-scraper-c45b7869d-n67mp 1/1 Running 0 95s pod/kubernetes-dashboard-79b5779bf4-6srmq 1/1 Running 0 95s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/dashboard-metrics-scraper ClusterIP 10.96.75.37
8000/TCP 95s service/kubernetes-dashboard NodePort 10.109.128.90
443:30080/TCP 95s [root@master ~]# ``` 然后在浏览器中打开 https://192.168.0.201:30080/,其中ip地址为master节点的ip 如下: ![](/static/upload/20220513_085428.png) ## 3.2 浏览器访问dashboard页面 如下创建访问账户,获取token ```bash # 创建账号 [root@master ~]# kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard serviceaccount/dashboard-admin created [root@master ~]# # 授权 [root@master ~]# kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin clusterrolebinding.rbac.authorization.k8s.io/dashboard-admin-rb created [root@master ~]# # 获取token [root@master ~]# kubectl get secrets -n kubernetes-dashboard | grep dashboard-admin dashboard-admin-token-748s2 kubernetes.io/service-account-token 3 3m16s [root@master ~]# [root@master ~]# kubectl describe secrets dashboard-admin-token-748s2 -n kubernetes-dashboard Name: dashboard-admin-token-748s2 Namespace: kubernetes-dashboard Labels:
Annotations: kubernetes.io/service-account.name: dashboard-admin kubernetes.io/service-account.uid: 865e01fd-0ef5-4f42-9dad-f49116ecce0a Type: kubernetes.io/service-account-token Data ==== token: eyJhbGciOiJSUzI1NiIsImtpZCI6IlMzcHVkSWhFclhxc0Eydzh0SXc4Q0ltQnVGc0xaZElsR0gtNzBUalBKSmsifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkYXNoYm9hcmQtYWRtaW4tdG9rZW4tNzQ4czIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGFzaGJvYXJkLWFkbWluIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQudWlkIjoiODY1ZTAxZmQtMGVmNS00ZjQyLTlkYWQtZjQ5MTE2ZWNjZTBhIiwic3ViIjoic3lzdGVtOnNlcnZpY2VhY2NvdW50Omt1YmVybmV0ZXMtZGFzaGJvYXJkOmRhc2hib2FyZC1hZG1pbiJ9.tTuwAikwMmUr9IL781PPTp9qx6jz7OXox8H3XvtYqtKBX7JZAM0lfkoMmtt8QPGvEgGhMO0Ze25uNjiRG5BxwZ5f7mzIWgpvxe5IIxrVYNl-xNu4Iml3cSzsHKrwXHpdhIn_lqEkqA0_060t4IRW1MiTKqnN_53q8UPu_YXaby4JchhHA-pmRh2qYdY7pVcNsDFc1W0Eo6UNG9Jw3Y3NNdTJAT-w5dzTFfLhV5TpG6STBihA8Aq9oLgx_88DHeiHA4xrGtWkCG8Bwx60bpVIwOOVMwg9iyW89ES8Zl5CcQvBOWNhnfIAq6d2OPNInSoHV_Xv1OSsV-Sex0EImKFssw ca.crt: 1066 bytes namespace: 20 bytes [root@master ~]# ``` 然后将toke拷贝到浏览器中即可,如下,即可看到登录后的dashboard页面了 ![](/static/upload/20220513_085452.png)
始终坚持开源开放共享精神,同时感谢您的充电鼓励和支持!
版权所有,转载本站文章请注明出处:redrose2100, http://blog.redrose2100.com/article/171
上一篇:
Kubernetes----Kubernetes常用插件简介
下一篇:
MySQL----MySQL中因为sql模式设置引起的问题解决办法
搜索
个人成就
出版书籍
《Pytest企业级应用实战》
测试开发技术全栈公众号
测试开发技术全栈公众号
DevOps技术交流微信群
加微信邀请进群
常用网站链接
开源软件洞察
云原生技术栈全景图
Python语言官方文档
Golang官方文档
Docker官方文档
Jenkins中文用户手册
Scrapy官方文档
VUE官方文档
Harbor官方文档
openQA官方文档
云原生开源社区
开源中国
Kubernetes中文文档
Markdown语法官方教程
Kubernetes中文社区
Kubersphere官方文档
BootStrap中文网站
JavaScript中文网
NumPy官方文档
Pandas官方文档
GitLink确实开源网站
数据库排名网站
编程语言排名网站
SEO综合查询网站
数学加减法练习自动生成网站
Kickstart Generator
文章分类
最新文章
最多阅读
特别推荐
×
Close
登录
注册
找回密码
登录邮箱:
登录密码:
图片验证码:
注册邮箱:
注册密码:
邮箱验证码:
发送邮件
注册邮箱:
新的密码:
邮箱验证码:
发送邮件