k8s 创建集群实战笔记
实验环境准备
三台机器
机器选择要求2c4g的配置比较好.
可以选择云平上的机器或者虚拟机
此处采取虚拟机方案. 省钱, 采用的虚拟机工具是 v_box 同样免费省钱
虚拟机安装前准备
镜像下载
镜像采用的是 CentOS-7-x86_64-DVD-2009.iso
桥接网卡配置
网卡的网段设置成和自己本机的直连或者wifi一个网段
虚拟机安装
配置方面采用 最起码的2c2g, 主节点的机器给到4g保险起见
网卡直接偷个懒搞两个. 一个桥接一个nat
(这里我老是容易调不好网络, 此方案属于比较水的举动, 但是可以解决虚拟机互通同时外网访问的问题, 省心一些)
ps:
nat 避免彼此网段冲突可以使用此方法进行操作, 详情见这篇博文
PS D:\v-boxs> .\VBoxManage modifyvm "k8s-worker-2" --natnet2 "172.2.0.0/24" PS D:\v-boxs> .\VBoxManage modifyvm "k8s-worker-1" --natnet2 "172.1.0.0/24"
把系统光盘挂载上, 开机按照指引一步一步安装即可.
网络调整验证
安装完成一台之后配置进入命令行界面. 登录验证后对 ip 进行调整
调整的部分如下, 防止每次重启会导致dhcp的ip发生变化
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=enp0s3 UUID=6d922c16-7dad-41fd-94dd-b972013374d3 DEVICE=enp0s3 ONBOOT=yes IPADDR=172.16.204.92 GATEWAY=172.16.204.1 DNS1=10.80.30.235
DNS2=114.114.114.114
修改完毕后重启网络
service network restart
三台主机之间内网 ip 互通, 配置到和 桥接网卡一样的网段, 也就是 和你本机网络一样的网段
自行验证下, 三台机器互相ping 一下, 以及外网
ps:
本次实验环境中 主节点的 ip 为 172.16.204.91 非常重要, 在配置主节点的时候需要用到
其他两个节点的 ip 分别为 90 和 92
安装 docker
安装这里参考之前写的 docker 的文章, 这里这里
k8s 安装逻辑
安装流程
安装三个必备工具
kubectl 命令行工具, 不安装此工具将无法调用集群相关的内容
kubeadm 用于安装k8s, 协助管理集群, 集群安装完毕后可卸载
kubelet 作为节点内必备的基础包. 必装
顺序 kubelet - > kubectl - > kubeadm
指定主节点
安装完三个工具包后
指定一台主机进行 kubeadm init 初始化为主节点
在指定了主节点之后, 主节点的 kukelet 就会自行安装
这部分内容
工作节点加入集群
非主节点的工作节点通过 kubeadm join 到主节点即可完成集群的构建
而工作节点的 kubeadm 则会创建必须的 , 其他则不需要
安装环境准备
安装要求
修改主机名
hostnamectl set-hostname k8s-master
禁用SELinux
临时禁用
sudo setenforce 0
永久禁用
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
关闭交换分区
要求 free -m 的时候 Swap 全部为 0
临时关闭
swapoff -a
永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab
允许 iptalbes 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
安装三大件
指定源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [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 exclude=kubelet kubeadm kubectl EOF
安装
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes
启动
sudo systemctl enable --now kubelet
使用 kubeadm 引导集群
镜像下载
下载各个机器需要的镜像, 生成一个 images.sh 的脚本
sudo tee ./images.sh <<-'EOF' #!/bin/bash images=( kube-apiserver:v1.20.9 kube-proxy:v1.20.9 kube-controller-manager:v1.20.9 kube-scheduler:v1.20.9 coredns:1.7.0 etcd:3.4.13-0 pause:3.2 ) for imageName in ${images[@]} ; do docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName done EOF
ps:
只有主节点是需要这么多镜像的, 其他的子节点只需要 kube-proxy 镜像即可. 详情见逻辑图中的各节点组件构成
执行下载镜像命令
chmod +x ./images.sh && ./images.sh
添加 master 域名映射
在 所有的节点上添加 master 域名映射, master 的必须加, 其他的倒是无所谓
echo "172.16.204.91 cluster-endpoint" >> /etc/hosts echo "172.16.204.90 cluster-node-1" >> /etc/hosts echo "172.16.204.92 cluster-node-2" >> /etc/hosts
校验是否成功
主节点操作
安装命令行提示工具
yum install bash-completion -y source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
安装了敲命令方便省心一些
初始化
以下命令只在主节点进行执行, 工作节点无需操作
kubeadm init \ --apiserver-advertise-address=172.16.204.91 \ --control-plane-endpoint=cluster-endpoint \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images\ --kubernetes-version v1.20.9 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16
标橙色的部分为根据自己的真实情况填写, 分别是 主节点的地址以及主节点的域名
标绿色的部分不按需修改, 至少满足各个网段不能冲突
当看到以下画面时. 表示安装成功
这段打印要复制一下, 以后要用到
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of control-plane nodes by copying certificate authorities and service account keys on each node and then running the following as root: kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \ --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7 \ --control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \ --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7
红色划线部分是重点, 马上就要执行,
棕色加粗的部分是可选的, 用于创建一个网络插件
橙色加粗的部分用于主节点的接入
绿色加粗部分则用于工作节点的接入
校验是否成功
可以看到节点列表里面应该有了主节点存在, 标识主节点初始化成功
此时可以看到 STATUS 状态为 NotReady 是因为网络插件还没安装, 所以未就绪
令牌过期处理
执行此命令可以重新生成绿色部分, 默认最开始的那个是只有24小时的有效期的
kubeadm token create --print-join-command
网路插件安装
网络插件的种类繁多通过上面这串的打印的部分可以看到有官方介绍 就是那段链接 这个这个
这里选择使用 calico , 下载 yaml 配置文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
执行应用配置文件创建资源
kubectl apply -f calico.yaml
ps:
如果在 pod-network-cidr 处进行了自定义, 则 配置文件中的部分也要做相应的修改
校验安装结果
docker ps kubectl get pods -A
ps:
一些nat的问题处理, 如果出现 calico-node-xxxx running 了但是一直无法 ready 的情况, 有可能是网卡选择错误导致
需要进行编辑配置文件处理,
kubectl edit ds calico-node -n kube-system
添加下两行在配置中
- name: IP_AUTODETECTION_METHOD
value: interface=enp0s3
工作节点操作
防火墙处理
检查防火墙
systemctl status firewalld
关闭防火墙
systemctl stop firealld.service
systemctl disable firewalld
端口转发处理
虚拟机环境可能存在以下报错, 最好检查下不然会导致节点加入集群的时候存在这个报错
[ERROR FileContent--proc-sys-net-ipv4-ip_forward]: /proc/sys/net/ipv4/ip_forward contents are not set to 1 这个报错用这个解决 sysctl -w net.ipv4.ip_forward=1
加入集群
master 节点的那个绿色部分在工作节点操作即可加入集群
kubeadm join cluster-endpoint:6443 --token syll4s.5xrkwga7ttg2wkg2 \ --discovery-token-ca-cert-hash sha256:7a366fe0e8dc56277848736dd469ffbf8574dace5f3edc3b159237c0e7ec0ed7
验证
查看下master 的pods 状态全部为 runing 则没问题
本文来自博客园,作者:羊驼之歌,转载请注明原文链接:https://www.cnblogs.com/shijieli/p/15699922.html