前言
- 想自己搭建一套k8s来学习使用,没有那么多服务器就想用虚拟机来实现
- k8s至少需要两台机器,我准备用三台机器一个master两个node
环境准备
- Windows 11
- VirtualBox 7.0(这个免费,VMware 收费,公司不能使用盗版软件)
- centos镜像 CentOS-7-x86_64-DVD-2009.iso
系统安装
注意
- 我们先安装配置一套虚拟机的环境,到后面再复制出来,这样省时省力
虚拟机配置
- 导入镜像包,这个比较简单,我就不多说了,主要是虚拟机的网络配置
- 设置两个网卡的网络模式,用来实现虚拟机内外网的正常通信
- 查看本机IP,使用和自己电脑一个网段
- 修改网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
# 修改3个地方
BOOTPROTO=static # 静态解析
ONBOOT=yes #启动加载
IPADDR=192.168.56.102 # 自定义IP地址
- 编辑/etc/hosts
# 修改dns
vim /etc/resolv.conf
改成 nameserver 114.114.114.114
软件安装
-
安装wget
yum install wget net-tools ntp -y -
修改上海时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime -
同步网络时间
ntpdate 0.asia.pool.ntp.org -
设置centos阿里云镜像源
-
curl -o /etc/yum.repos.d/CentOS-Base.repo mirrors.aliyun.com/repo/Centos…
-
设置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`
- 用于桥接的流量转发
modprobe br_netfilter echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/ipv4/ip_forward
- 添加配置文件
vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
- 关闭防火墙
systemctl stop firewalld // 停止
systemctl disable firewalld //禁用
- 关闭setlinx
#永久关闭
vim /etc/selinux/config
SELINUX=disabled
关闭swap(从这开始没有每个机器都改 只改了master)
- 临时关闭
swapoff -a - 永久关闭注释最后一行
vim /etc/fstab
- 临时关闭
- 上海时区
timedatectl set-timezone Asia/Shanghai
Docker 安装
安装docker
- 安装docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
# 开机启动
systemctl enable docker
- 修改docker配置
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors": ["https://5lnahg7c.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"], //这个加上我有个奇怪的错误就是这么解决的
"log-driver": "json-file","log-opts": {"max-size": "100m"}
}
EOF
- 重新加载
systemctl daemon-reload
安装k8s
yum install -y kubeadm kubelet kubectl
复制虚拟机
注意事项
安装完k8s就可以复制虚拟机了,后续的操作都是分节点操作了
复制后的操作
-
配置主机名
hostnamectl set-hostname master
-
修改IP
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3 -
用于桥接的流量转发[要重新配置]
modprobe br_netfilter echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/ipv4/ip_forward
k8s 配置
初始化主节点
- 查看kubectl版本
kubectl version --short
- 修改 containerd 配置文件,在k8s1.24之后,通过--image-repository设置的镜像地址,不会传递给cri,需要自己修改配置文件
# 自动生成配置文件
containerd config default > /etc/containerd/config.toml
# 修改配置文件
# 新增
vim /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
#修改
vim /etc/containerd/config.toml
sandbox_image="registry.aliyuncs.com/google_containers/pause:x.x"
# 地址的版本要看配置文件里面的版本,只修改前面的域名
- 初始化脚本
kubeadm init --kubernetes-version=1.26.1 \
--apiserver-advertise-address=192.168.56.102 \
--image-repository registry.aliyuncs.com/google_containers \
--service-cidr=10.1.0.0/16 \
--pod-network-cidr=10.244.0.0/16
-
初始化成功之后,按界面的提示运行下面三条命令
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
配置fannel网络
- 这个是centos自带的,用的比较多
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
# 查看pod运行情况,可能no-ready需要等待一下
kubectl get po -n kube-system
安装dashboard
安装dashboard
要和k8s版本匹配
版本查看
- 将文件下载下来,修改一下配置
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
- 添加外网端口,注意大小写
- 应用配置
kubectl apply -f recommended.yaml
-
查看pod信息
kubectl get pod -n kubernetes-dashboard
-
查询所在节点信息
kubectl get pod -o wide -n kubernetes-dashboard
-
打开dashboard
账户
普通账户
# 创建账户 kubectl create serviceaccount dyb
# 生成 kubectl create token dyb
超级管理员账户
# 创建 dashboard-admin 用户
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 绑定 clusterrolebinding
kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
-
创建 token
cat > dashboard-admin-token.yaml<<EOF apiVersion: v1 kind: Secret metadata: name: dashboard-admin-secret namespace: kubernetes-dashboard annotations: kubernetes.io/service-account.name: dashboard-admin type: kubernetes.io/service-account-token EOF kubectl apply -f dashboard-admin-token.yaml
-
查看token
kubectl describe secret dashboard-admin-secret -n kubernetes-dashboard
登录
- 用token登录
- 首页
使用遇到的问题
- 在node节点上执行kubectl get nodes 或者相关命令的时候,会提示
The connection to the server localhost:8080 was refused - did you specify the right host or port?
- 那是因为kubectl 命令需要kubernetes-admin 来运行,需要admin.conf文件,conf是kubeadm init初始化主节点的时候生成的,需要从主节点复制过去,再设置环境变量就行
# 从主节点拷贝
scp /etc/kubernetes/admin.conf 192.168.56.103:/etc/kubernetes/
# 设置环境变量
export KUBECONFIG=/etc/kubernetes/admin.conf
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
© 版权声明
文章版权归作者所有,未经允许请勿转载,侵权请联系 admin@trc20.tw 删除。
THE END