Kubernetes(k8s)安装以及搭建k8s-Dashboard详解

打印 上一主题 下一主题

主题 541|帖子 541|积分 1623

目录

一、前期准备

1)前提条件


  • 三台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 - - Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
  • 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
  • 2 CPU 核或更多
  • 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
  • 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
  • 开启机器上的某些端口。
  • 禁用交换分区。为了保证 kubelet 正常工作,必须 禁用交换分区。
2)机器信息

机器类型操作系统网卡IP节点类型VMware虚拟机centos8ens33192.168.0.113k8s-masterVMware虚拟机centos8ens33192.168.0.114k8s-node1VMware虚拟机centos8ens33192.168.0.115k8s-node2修改主机名
  1. # 在192.168.0.113执行
  2. $ hostnamectl set-hostname k8s-master
  3. # 在192.168.0.114执行
  4. $ hostnamectl set-hostname k8s-node1
  5. # 在192.168.0.115执行
  6. $ hostnamectl set-hostname k8s-node2
复制代码
时间同步
  1. $ yum install chrony -y
  2. $ systemctl start chronyd
  3. $ systemctl enable chronyd
  4. $ chronyc sources
复制代码
3)确保每个节点上 MAC 地址和 product_uuid 的唯一性


  • 你可以使用命令 ip link来获取网络接口的 MAC 地址
  • 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装 失败。
4)允许 iptables 检查桥接流量(可选)


  • 确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
  • 为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。所有节点都执行以下命令:
  1. $ cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
  2. br_netfilter
  3. EOF
  4. $ cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
  5. net.bridge.bridge-nf-call-ip6tables = 1
  6. net.bridge.bridge-nf-call-iptables = 1
  7. EOF
  8. # 手动加载所有的配置文件
  9. $ sudo sysctl --system
复制代码

2)关闭防火墙
  1. # 安装yum-config-manager配置工具
  2. $ yum -y install yum-utils
  3. # 设置yum源
  4. $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  5. # 安装docker-ce版本
  6. $ sudo yum install -y docker-ce
  7. # 启动
  8. $ sudo systemctl start docker
  9. # 开机自启
  10. $ sudo systemctl enable docker
  11. # 查看版本号
  12. $ sudo docker --version
  13. # 查看版本具体信息
  14. $ sudo docker version
  15. # Docker镜像源设置
  16. # 修改文件 /etc/docker/daemon.json,没有这个文件就创建
  17. # 添加以下内容后,重启docker服务:
  18. {
  19.    "registry-mirrors": ["http://hub-mirror.c.163.com"]
  20. }
  21. $ sudo systemctl restart docker
复制代码
3)关闭swap

kubelet 在 1.8 版本以后强制要求 swap 必须关闭。要不然kubelet 无法正常启动
  1. $ echo "192.168.0.113 k8s-master" >> /etc/hosts
  2. $ echo "192.168.0.114 k8s-node1" >> /etc/hosts
  3. $ echo "192.168.0.115 k8s-node2" >> /etc/hosts
  4. # 查看
  5. $ cat /etc/hosts
复制代码
4)将 SELinux 设置为 disabled模式(相当于将其禁用)
  1. $ systemctl stop firewalld
  2. $ systemctl disable firewalld
复制代码
5)配置yum源,这里配置阿里云的源
  1. # 临时关闭;关闭swap主要是为了性能考虑
  2. $ swapoff -a
  3. # 可以通过这个命令查看swap是否关闭了
  4. $ free
  5. # 永久关闭        
  6. $ sed -ri 's/.*swap.*/#&/' /etc/fstab  
复制代码
如果不加入环境变量,会出现如下报错:

8)安装Pod网络插件(CNI:Container Network Interface)(master)

你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。
  1. # 临时关闭
  2. $ sudo setenforce 0
  3. # 永久禁用
  4. $ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
复制代码
如果上面安装失败,则下载我百度里的,离线安装
链接:https://pan.baidu.com/s/1HB9xuO3bssAW7v5HzpXkeQ
提取码:8888
  1. $ cat > /etc/yum.repos.d/kubernetes.repo << EOF
  2. [k8s]
  3. name=k8s
  4. enabled=1
  5. gpgcheck=0
  6. baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
  7. EOF
复制代码

查看集群信息
  1. $ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  2. # disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
  3. # 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
  4. $ sudo systemctl enable --now kubelet
  5. # 查看状态
  6. $ systemctl status kubelet
复制代码

9)Node节点加入集群

如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌:
  1. $ kubectl version
  2. $ yum info kubeadm
复制代码

默认情况下,令牌会在24小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌:
  1. $ kubeadm token create# 再查看$ kubectl version
  2. $ yum info kubeadm
复制代码

如果你没有 --discovery-token-ca-cert-hash 的值,则可以通过在控制平面节点上执行以下命令链来获取它:
  1. # 手动拉取默认版本的coredns镜像
  2. $ docker pull  registry.aliyuncs.com/google_containers/coredns   
复制代码

如果执行kubeadm init时没有记录下加入集群的命令,可以通过以下命令重新创建(推荐)一般不用上面的分别获取token和ca-cert-hash方式,执行以下命令一气呵成:
  1. $ docker images
复制代码

以下命令在node节点执行**
  1. # 查看集群信息$ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  2. # disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
  3. # 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
  4. $ sudo systemctl enable --now kubelet
  5. # 查看状态
  6. $ systemctl status kubelet
复制代码
【问题】这里可能会报错 localhost:10248拒绝访问,这个无解,重装系统解决

【解决】
重置节点信息
  1. $ kubeadm init \
  2.   --apiserver-advertise-address=192.168.0.113 \
  3.   --image-repository registry.aliyuncs.com/google_containers \
  4.   --kubernetes-version v1.22.1 \
  5.   --service-cidr=10.1.0.0/16 \
  6.   --pod-network-cidr=10.244.0.0/16
复制代码
需要将master节点的 /etc/kubernetes/admin.conf复制到node节点的相同位置
  1. $ tail /var/log/messages
复制代码

执行下面的代码加入环境变量
  1. $ systemctl daemon-reload
  2. $ systemctl restart kubelet
复制代码
修改docker的cgroup driver,修改或创建/etc/docker/daemon.json,加入下述内容:
  1. {
  2.   "exec-opts": ["native.cgroupdriver=systemd"]
  3. }
复制代码
重新加载
  1. $ cat /etc/docker/daemon.json
  2. $ systemctl daemon-reload
  3. $ systemctl restart docker
  4. # 查看docker的cgroup driver
  5. $ docker info | grep Cgroup
复制代码
  1. $ sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
  2. # disableexcludes=kubernetes:禁掉除了这个kubernetes之外的别的仓库
  3. # 设置为开机自启并现在立刻启动服务 --now:立刻启动服务
  4. $ sudo systemctl enable --now kubelet
  5. # 查看状态
  6. $ systemctl status kubelet
复制代码

安装flannel网络插件,采用离线安装,kube-flanel.yml文件上面有
  1. $ kubeadm init \
  2.   --apiserver-advertise-address=192.168.0.113 \
  3.   --image-repository registry.aliyuncs.com/google_containers \
  4.   --kubernetes-version v1.22.1 \
  5.   --service-cidr=10.1.0.0/16 \
  6.   --pod-network-cidr=10.244.0.0/16
复制代码
将node节点加入到集群中
  1. $ docker images# --v=5:显示详细信息$ kubeadm join 192.168.0.113:6443 --token cgmxso.bfgou00m72tnbpz4 --discovery-token-ca-cert-hash sha256:b4792b0f3b54c8b8b71a4a484129b4e2acfe5014c37b1b18dbebbc0c8f69fc15 --v=5
复制代码

另一个node节点同上操作
【问题】STATUS一直为NotReady
首先使用如下命令来看一下kube-system的 pod 状态:
  1. # 临时生效(退出当前窗口重连环境变量失效)
  2. $ export KUBECONFIG=/etc/kubernetes/admin.conf
  3. # 永久生效(推荐)
  4. $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  5. $ source  ~/.bash_profile
复制代码

如上,可以看到 pod kube-flannel 的状态是ImagePullBackoff,意思是镜像拉取失败了,所以我们需要手动去拉取这个镜像。这里可以看到某些 pod 运行了两个副本是因为我有两个节点存在了。
也可以通过kubectl describe pod -n kube-system 来查看某个服务的详细情况,如果 pod 存在问题的话,你在使用该命令后在输出内容的最下面看到一个[Event]条目,如下:
  1. $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
复制代码

【解决】手动拉取镜像
  1. $ kubectl apply -f kube-flannel.yml
  2. $ docker images
复制代码
修改完了之后过几分钟 k8s 会自动重试,等一下就可以发现不仅flannel正常了,其他的 pod 状态也都变成了Running,这时再看 node 状态就可以发现问题解决了:

四、清理

如果你在集群中使用了一次性服务器进行测试,则可以关闭这些服务器,而无需进一步清理。你可以使用 kubectl config delete-cluster 删除对集群的本地引用。
1)先将节点设置为维护模式(k8s-node1是节点名称)
  1. $ kubectl get nodes
复制代码
2)在删除节点之前,请重置 kubeadm 安装的状态:
  1. $ kubeadm init \
  2.   --apiserver-advertise-address=192.168.0.113 \
  3.   --image-repository registry.aliyuncs.com/google_containers \
  4.   --kubernetes-version v1.22.1 \
  5.   --service-cidr=10.1.0.0/16 \
  6.   --pod-network-cidr=10.244.0.0/16
复制代码
3)重置过程不会重置或清除 iptables 规则或 IPVS 表。如果你希望重置 iptables,则必须手动进行:
  1. $ kubeadm token create
  2. # 再查看
  3. $ kubeadm token list
复制代码
4)如果要重置 IPVS 表,则必须运行以下命令:
  1. $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
  2.    openssl dgst -sha256 -hex | sed 's/^.* //'
复制代码
5)现在删除节点:
  1. $ kubeadm token create --print-join-command
复制代码
五、搭建K8S Dashboard

1)下载dashboard文件:
  1. # 查看集群信息
  2. $ kubectl get nodes
复制代码
如果地址不可用可以使用下面的地址下载
链接:https://pan.baidu.com/s/1-tEablkFTrMC-N9-8T7rrA
提取码:8888
安装
  1. $ kubeadm reset
复制代码
验证,查看服务被分配到哪个节点上:$ scp /etc/kubernetes/admin.conf 192.168.0.114:/etc/kubernetes/
$ scp /etc/kubernetes/admin.conf 192.168.0.115:/etc/kubernetes/
  1. $ scp /etc/kubernetes/admin.conf 192.168.0.114:/etc/kubernetes/
  2. $ scp /etc/kubernetes/admin.conf 192.168.0.115:/etc/kubernetes/
复制代码

从上图可知,服务被分配到了k8s-node1,对外端口为nodePort:31080,配置文件里的。
谷歌浏览器访问不了,原因是部署UI的镜像中默认自带的证书是一个不可信任的证书,则先用火狐访问:https://nodeIp:nodePort
https://192.168.0.114:31080

获取token测试
  1. $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  2. $ source  ~/.bash_profile
复制代码



解决谷歌浏览器不能访问的问题,通过生成新的证书永久解决
  1. {
  2.   "exec-opts": ["native.cgroupdriver=systemd"]
  3. }
复制代码

服务调度到k8s-node2节点上了,访问
https://192.168.0.115:31080

现在Google浏览器也可以访问了
再获取token登录
  1. $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  2. $ source  ~/.bash_profile
复制代码


以上就完整版K8s安装流程了~

来源:https://www.cnblogs.com/liugp/p/16357445.html
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

小秦哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表