Kubernetes(k8s)安装以及搭建k8s |
您所在的位置:网站首页 › nba2k22安装包多大 › Kubernetes(k8s)安装以及搭建k8s |
目录一、前期准备1)前提条件2)机器信息3)确保每个节点上 MAC 地址和 product_uuid 的唯一性4)允许 iptables 检查桥接流量(可选)5)检查所需端口二、安装 runtime三、安装 kubeadm、kubelet 和 kubectl1)配置hosts2)关闭防火墙3)关闭swap4)将 SELinux 设置为 disabled模式(相当于将其禁用)5)配置yum源,这里配置阿里云的源6)开始安装kubeadm,kubelet和kubectl7)使用 kubeadm 创建集群(master节点)8)安装Pod网络插件(CNI:Container Network Interface)(master)9)Node节点加入集群四、清理五、搭建K8S Dashboard
一、前期准备
1)前提条件
三台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 - - Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
2 CPU 核或更多
集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
节点之中不可以有重复的主机名、MAC 地址或 product_uuid。
开启机器上的某些端口。
禁用交换分区。为了保证 kubelet 正常工作,必须 禁用交换分区。
2)机器信息
机器类型
操作系统
网卡
IP
节点类型
VMware虚拟机
centos8
ens33
192.168.0.113
k8s-master
VMware虚拟机
centos8
ens33
192.168.0.114
k8s-node1
VMware虚拟机
centos8
ens33
192.168.0.115
k8s-node2
修改主机名 # 在192.168.0.113执行 $ hostnamectl set-hostname k8s-master # 在192.168.0.114执行 $ hostnamectl set-hostname k8s-node1 # 在192.168.0.115执行 $ hostnamectl set-hostname k8s-node2时间同步 $ yum install chrony -y $ systemctl start chronyd $ systemctl enable chronyd $ 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。所有节点都执行以下命令: $ cat /etc/hosts $ echo "192.168.0.115 k8s-node2" >> /etc/hosts # 查看 $ cat /etc/hostskubelet 在 1.8 版本以后强制要求 swap 必须关闭。要不然kubelet 无法正常启动 # 临时关闭;关闭swap主要是为了性能考虑 $ swapoff -a # 可以通过这个命令查看swap是否关闭了 $ free # 永久关闭 $ sed -ri 's/.*swap.*/#&/' /etc/fstab 4)将 SELinux 设置为 disabled模式(相当于将其禁用) # 临时关闭 $ sudo setenforce 0 # 永久禁用 $ sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 5)配置yum源,这里配置阿里云的源 $ cat > /etc/yum.repos.d/kubernetes.repo > ~/.bash_profile $ source ~/.bash_profile如果不加入环境变量,会出现如下报错: 你必须部署一个基于 Pod 网络插件的 容器网络接口 (CNI),以便你的 Pod 可以相互通信。 $ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml如果上面安装失败,则下载我百度里的,离线安装 链接:https://pan.baidu.com/s/1HB9xuO3bssAW7v5HzpXkeQ 提取码:8888 $ kubectl apply -f kube-flannel.yml $ docker images查看集群信息 $ kubectl get nodes如果没有令牌,可以通过在控制平面节点上运行以下命令来获取令牌: $ kubeadm token list默认情况下,令牌会在24小时后过期。如果要在当前令牌过期后将节点加入集群, 则可以通过在控制平面节点上运行以下命令来创建新令牌: $ kubeadm token create # 再查看 $ kubeadm token list如果你没有 --discovery-token-ca-cert-hash 的值,则可以通过在控制平面节点上执行以下命令链来获取它: $ openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'如果执行kubeadm init时没有记录下加入集群的命令,可以通过以下命令重新创建(推荐)一般不用上面的分别获取token和ca-cert-hash方式,执行以下命令一气呵成: $ kubeadm token create --print-join-command以下命令在node节点执行** # 查看集群信息 $ kubectl get nodes【问题】这里可能会报错 localhost:10248拒绝访问,这个无解,重装系统解决 【解决】 重置节点信息 $ kubeadm reset需要将master节点的 /etc/kubernetes/admin.conf复制到node节点的相同位置 $ scp /etc/kubernetes/admin.conf 192.168.0.114:/etc/kubernetes/ $ scp /etc/kubernetes/admin.conf 192.168.0.115:/etc/kubernetes/执行下面的代码加入环境变量 $ echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile $ source ~/.bash_profile修改docker的cgroup driver,修改或创建/etc/docker/daemon.json,加入下述内容: { "exec-opts": ["native.cgroupdriver=systemd"] }重新加载 $ systemctl daemon-reload $ systemctl restart docker $ docker info | grep Cgroup安装flannel网络插件,采用离线安装,kube-flanel.yml文件上面有 $ kubectl apply -f kube-flannel.yml将node节点加入到集群中 $ kubeadm token create --print-join-command # --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 状态: $ kubectl get pod -n kube-system $ kubectl get pod -n kube-system -o wide如上,可以看到 pod kube-flannel 的状态是ImagePullBackoff,意思是镜像拉取失败了,所以我们需要手动去拉取这个镜像。这里可以看到某些 pod 运行了两个副本是因为我有两个节点存在了。 也可以通过kubectl describe pod -n kube-system 来查看某个服务的详细情况,如果 pod 存在问题的话,你在使用该命令后在输出内容的最下面看到一个[Event]条目,如下: $ kubectl describe pod kube-flannel-ds-4j2mp -n kube-system【解决】手动拉取镜像 $ docker pull quay.io/coreos/flannel:v0.14.0修改完了之后过几分钟 k8s 会自动重试,等一下就可以发现不仅flannel正常了,其他的 pod 状态也都变成了Running,这时再看 node 状态就可以发现问题解决了: 如果你在集群中使用了一次性服务器进行测试,则可以关闭这些服务器,而无需进一步清理。你可以使用 kubectl config delete-cluster 删除对集群的本地引用。 1)先将节点设置为维护模式(k8s-node1是节点名称) $ kubectl drain k8s-node1 --delete-local-data --force --ignore-daemonsets2)在删除节点之前,请重置 kubeadm 安装的状态: $ kubeadm reset3)重置过程不会重置或清除 iptables 规则或 IPVS 表。如果你希望重置 iptables,则必须手动进行: $ iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X4)如果要重置 IPVS 表,则必须运行以下命令: $ ipvsadm -C5)现在删除节点: $ kubectl delete node k8s-node1 五、搭建K8S Dashboard1)下载dashboard文件: $ curl -o kubernetes-dashboard.yaml https://raw.githubusercontent.com/kubernetes/dashboard/master/aio/deploy/recommended/kubernetes-dashboard.yaml如果地址不可用可以使用下面的地址下载 链接:https://pan.baidu.com/s/1-tEablkFTrMC-N9-8T7rrA 提取码:8888 安装 $ kubectl apply -f kubernetes-dashboard.yaml验证,查看服务被分配到哪个节点上:$ kubectl get pods -n kube-system -o wide $ kubectl get pods -n kube-system -o wide从上图可知,服务被分配到了k8s-node1,对外端口为nodePort:31080,配置文件里的。 谷歌浏览器访问不了,原因是部署UI的镜像中默认自带的证书是一个不可信任的证书,则先用火狐访问:https://nodeIp:nodePort https://192.168.0.114:31080 获取token测试 $ kubectl get secret -n kube-system|grep kubernetes-dashboard-token # 根据自己情况输入命令 $ kubectl describe secret kubernetes-dashboard-token-m7b7b -n kube-system解决谷歌浏览器不能访问的问题,通过生成新的证书永久解决 # 创建一个用于自签证书的目录 $ mkdir kubernetes-dashboard-key && cd kubernetes-dashboard-key # 生成证书请求的key $ openssl genrsa -out dashboard.key 2048 # 192.168.0.113为master节点的IP地址 $ openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=192.168.0.113' # 生成自签证书 $ openssl x509 -req -in dashboard.csr -signkey dashboard.key -out dashboard.crt # 删除原有证书 $ kubectl delete secret kubernetes-dashboard-certs -n kube-system # 创建新证书的secret $ kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kube-system # 查找正在运行的pod $ kubectl get pod -n kube-system # 删除pod,让k8s自动拉起一个新的pod,相对于重启 kubectl delete pod kubernetes-dashboard-7d6c598b5f-fvcg8 -n kube-system服务调度到k8s-node2节点上了,访问 https://192.168.0.115:31080 现在Google浏览器也可以访问了 再获取token登录 $ kubectl get secret -n kube-system|grep kubernetes-dashboard-token # 根据自己情况输入命令 $ kubectl describe secret kubernetes-dashboard-token-m7b7b -n kube-system以上就完整版K8s安装流程了~ |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |