K8S 安装前置引导
k8s 安装需要三台服务器 其中为一台主节点 Master, 以及多台工作节点 Node, 这里指的是两台工作节点
这里假设以 VMware 启动三台模拟器作为运行环境,这里写明些注意点
系统镜像源 - 加速下载
推荐阿里镜像源,速度一般般吗,但是人家全啊,版本也新 阿里镜像源
- centos
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
- epel
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
- elrepo 这个主要用来升级内核
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak # 编辑 /etc/yum.repos.d/elrepo.repo 文件,在 mirrorlist= 开头的行前面加 # 注释掉;并将 elrepo.org/linux 替换为 mirrors.aliyun.com/elrepo 以下是快捷指令 sed -i 's/mirrorlist=/# mirrorlist=/g' /etc/yum.repos.d/elrepo.repo sed -i 's/elrepo.org\/linux/mirrors.aliyun.com\/elrepo/g' /etc/yum.repos.d/elrepo.repo
- kubernets - k8s
cat <<EOF > /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.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
- docker-ce docker; containerd 加速
yum clean all -y && yum makecache fast -y # 安装一些必要工具已经环境工具 yum install -y yum-utils device-mapper-persistent-data lvm2 net-tools vim yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
- 最后配置完成执行以下命令
yum makecache fast -y
系统环境准备工作
升级内核
uname -sr yum --disablerepo="*" --enablerepo="elrepo-kernel" list available yum -y --enablerepo=elrepo-kernel install kernel-ml sed -i 's/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/g' /etc/default/grub grub2-mkconfig -o /boot/grub2/grub.cfg reboot #重启
iptables 设置
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf overlay br_netfilter EOF modprobe overlay modprobe br_netfilter # 设置所需的 sysctl 参数,参数在重新启动后保持不变 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF # 应用 sysctl 参数而不重新启动 sudo sysctl --system -p # 查看 br_netfilter 和 overlay 是否被应用 lsmod | grep br_netfilter && lsmod | grep overlay
安装docker
# 上面的镜像准备工作已经将全部准备好 接下直接安装工作 yum -y install docker-ce # 配置docker加速下载 sudo tee /etc/docker/daemon.json <<-'EOF' { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": [ "https://7koha918.mirror.aliyuncs.com", "https://hub-mirror.c.163.com" ] } EOF #启动并启用docker systemctl start docker && systemctl enable docker docker info
关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
主机名设置 解析(每个节点都要设置)
hostnamectl set-hostname <hostname> # 例子 hostnamectl set-hostname k8s-master # 将每个节点的对应ip互相映射 cat >> /etc/hosts << EOF 192.168.6.200 k8s-master 192.168.6.201 k8s-node1 192.168.6.202 k8s-node2 EOF
时间同步
yum install ntpdate -y && ntpdate time.windows.com
关闭 SELinux
getenforce && setenforce 0 # 开机也禁用 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
关闭 swap 分区
sed -ri 's/.*swap.*/#&/' /etc/fstab && swapoff -a
启用ivps
yum -y install ipset ipvsadm cat > /etc/sysconfig/modules/ipvs.modules <<EOF #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF # 授权运行检查 chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4
重启
reboot
k8s环境安装
- 安装K8S相关应用
# 查看支持的版本 最好安装最新版本的上一个版本 新的版本太坑了 例如最新是 1.26的话就安装 1.25的最后一个版本 如果想安装最新版本,一样支持 yum list kube* --showduplicates # 安装 yum install -y kubelet-1.25.6 kubectl-1.25.6 kubeadm-1.25.6 --disableexcludes=kubernetes # 检查所需的镜像资源 配置国内镜像 registry.cn-hangzhou.aliyuncs.com/google_containers 其中需要 记住 registry.cn-hangzhou.aliyuncs.com/google_containers/pause:* 这个镜像 * 代表版本号 后面会有用 kubeadm config images list --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers # 启用 kubelet systemctl enable kubelet && systemctl restart kubelet
安装中间桥接插件 cri-docker cri-docker地址 下载最新的例如centos7 文件带el
# 下载可以本地下完上传或者直接 curl下载 例子 curl -o ./cri-dockerd-0.3.1-3.el7.x86_64.rpm https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.1/cri-dockerd-0.3.1-3.el7.x86_64.rpm # 编辑中间件相关环境 将上面的pause镜像配置进去 查找到--container-runtime-endpoint fd:// 在之后追加 --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.8 追加前面有空格 vim /usr/lib/systemd/system/cri-docker.service # 不使用上诉编辑方式也可以直接使用下面语句快速设置 记得要修改pause镜像版本 sed -i 's/--container-runtime-endpoint fd:\/\//--container-runtime-endpoint fd:\/\/ --pod-infra-container-image=registry.cn-hangzhou.aliyuncs.com\/google_containers\/pause:3.8/g' /usr/lib/systemd/system/cri-docker.service # 启用 cri-docker systemctl start cri-docker && systemctl enable cri-docker
初始化master节点
# 192.168.6.200 - 本机IP K8S版本-v1.25.6 加速镜像 - registry.cn-hangzhou.aliyuncs.com/google_containers 驱动容器方式 unix:///var/run/cri-dockerd.sock kubeadm init --apiserver-advertise-address=192.168.6.200 --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers --kubernetes-version=v1.25.6 --service-cidr=10.96.0.0/12 --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/cri-dockerd.sock # 执行 加入后手工操作的部分 在完成后会有提示 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config export KUBECONFIG=/etc/kubernetes/admin.conf
node节点加入
# node 节点加入 驱动容器方式 unix:///var/run/cri-dockerd.sock 在加入完成后最后会有节点如何加入的命令行 由于是docker驱动 需要另外加入参数 kubeadm join 192.168.6.200:6443 --token 54j9k3.udgq8fw7ttrdiy5j \ --discovery-token-ca-cert-hash sha256:6b3fc2139c792e7d5a9676a433b3736e8dfe0778ca385a0d46fbd8288164da40 --cri-socket=unix:///var/run/cri-dockerd.sock # 上诉加入token失效后 可以在master节点用以下命令继续创建加入token kubeadm token create --print-join-command #临时有效 kubeadm token create --ttl 0 --print-join-command # 永久有效
添加网络插件【必要】以上都完成后在完成这个不走才能让k8s正常运行 官方介绍 这里使用官方中的 Calico
# 使用下面的命令可以查看到状态都是 Not Ready 需要完成下面的操作 kubectl get nodes # 下载不要使用master分支 使用对应tag最新的稳定的分支 例如先最新是 3.25 https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml 自己在 github中找 目录/manifests/calico.yaml 下面是例子下载, 也可以下载本地上传 文件还需要进一步修改 curl -o ./calico.yaml https://raw.githubusercontent.com/projectcalico/calico/v3.25.0/manifests/calico.yaml # 修改部分参数 查找 CLUSTER_TYPE 然后在下面增加本地网卡 下面是大致情况 其中 ens33 可以用ifconfig查看到设置对应的值 #- name: CLUSTER_TYPE # value: "k8s,bgp" #- name: IP_AUTODETECTION_METHOD # value: "interface=ens33" # 查找 CALICO_IPV4POOL_CIDR # 默认是注释的 默认的地址与我们 初始化 master的 --pod-network-cidr 值不一致,这个要取消注释,设置同一个值 # - name: CALICO_IPV4POOL_CIDR # value: "10.244.0.0/16" vim calico.yaml # 执行改修改好的 yaml 文件 kubectl apply -f calico.yaml # 查看进度情况 kubectl get pods -n kube-system -o wide #等所有都正常运行了 再次查看节点情况 都是 Ready kubectl get nodes
- 备注
# 如果安装过程出现异常等 可以进行重置 驱动容器方式 unix:///var/run/cri-dockerd.sock kubeadm reset --cri-socket=unix:///var/run/cri-dockerd.sock
- 完毕
K8S测试
使用 Nginx 进行基础测试
# 创建 一个命名空间 kubectl create namespace dev # 运行一个 nginx kubectl create deployment nginx --image=nginx -n dev # 暴露端口访问 NodePort kubectl expose deployment nginx --port=80 --type=NodePort -n dev # 查看暴露端口以及运行情况 kubectl get pods,svc -n dev # 最后外部访问 随便一个节点ip 加端口访问 # 不需要使用可以删除 简单的将命名空间删除 内部的相关内容也会删除 kubectl delete namespace dev
- 完毕