Kubespray是开源的kubernetes部署工具,整合了ansible,可以方便的部署高可用集群环境。
官网地址:https://github.com/kubernetes-sigs/kubespray
注意:要求两台机器都可以访问github,不然后面安装的时候,下载文件会非常非常慢。
机器信息:
主机名称 | IP地址 | 作用 | 操作系统版本号 |
---|---|---|---|
master/node1 | 192.168.10.14 | ansible部署集群 | Ubuntu 22.04.5 LTS |
ansible | 192.168.10.12 | k8s服务器 | CentOS Linux release 8.5.2111 |
1、centos预先配置
echo "node1" > /etc/hostname
sudo reboot # 重启生效
echo "192.168.10.12 node1" >> /etc/hosts
ping node1 # 可ping通
关闭防火墙:systemctl stop firewalld && systemctl disable firewalld
# ipv4网络配置:
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
sysctl -w net.ipv4.ip_forward=1
cat /proc/sys/net/ipv4/ip_forward # 返回值为1,则表示IPv4转发已开启
/etc/sysctl.conf # 永久生效
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
sudo sysctl -p # 应用这些设置
# 关闭交换分区,防止干扰Cgroups的内存管理
sudo swapoff -a # 临时关闭
/etc/fstab
#/dev/mapper/cl-swap none swap defaults 0 0 # 前面注释掉,永久关闭
# 配置ssh
sudo vi /etc/ssh/sshd_config
PubkeyAuthentication yes
PasswordAuthentication yes
PermitRootLogin yes # 或者设置为 no,取决于您是否允许 root 登录
sudo systemctl restart sshd
# date,查看一下时间对不对。
另外:setenforce 0
2、ansible主机配置
2.1、免密登录
# 生成公钥:
ssh-keygen -t rsa
# 查看公钥:
ls /home/liang/.ssh/
# 生成的密钥发送给客户端:
ssh-copy-id -i /home/liang/.ssh/id_rsa.pub root@192.168.10.12
2.2、安装其他
sudo apt-get install python3-pip # 安装pip
pip3 install --upgrade pip # 升级pip3
pip3 install jinja2 --upgrade # 安装jinja2模块
sudo apt install python3 # 默认已安装
# 若遇到不能解析域名的问题,
添加/etc/resolv.conf
nameserver 8.8.8.8
2.3、安装kubespray
sudo mkdir /usr/local/kubespray && cd /usr/local/kubespray/
sudo wget https://github.com/kubernetes-sigs/kubespray/archive/v2.26.0.tar.gz
sudo tar -xvf v2.26.0.tar.gz
cd kubespray-2.26.0/
# 安装kubespray所需的应用(是pip3)
pip3 install -r requirements.txt --upgrade # 可能提示找不到,可以使用下面的命令安装
# 安装提醒:提示安装的脚本位于/home/liang/.local/bin目录,而这个目录不在您的系统 PATH 环境变量中
export PATH="$PATH:/home/liang/.local/bin"
source ~/.bashrc
# 安装ansible
tar -xvf ansible-9.8.0.tar.gz
cd ansible-9.8.0
python3 -m pip install --upgrade pip setuptools wheel
sudo python3 -m pip install ansible-core==2.16.9
sudo python3 -m pip install .
# 复制一份demo配置信息
sudo cp -rfp inventory/sample inventory/mycluster
cd /usr/local/kubespray/kubespray-2.26.0
declare -a IPS=(192.168.10.12) # 设置集群信息
# 配置ansible
sudo pip3 install ruamel.yaml # 下面的配置需要依赖ruamel.yaml模块
sudo CONFIG_FILE=inventory/mycluster/hosts.yml python3 contrib/inventory_builder/inventory.py ${IPS[@]}
--会自动生成inventory/mycluster/hosts.yml这个文件。当然也可以修改。
# 开始安装k8s
ansible-playbook -i inventory/mycluster/hosts.yml --become --become-user=root cluster.yml
# 报错1:fatal: [node1]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: …………
# 解决1:
sudo vim inventory/mycluster/hosts.yml
access_ip: 192.168.10.12 # 添加一下用户配置信息
ansible_user: root
ansible_password: "1"
ansible_become: yes
ansible all -m ping -i inventory/mycluster/hosts.yml --become # 测试连通性
# 若提示 connection type with passwords or pkcs11_provider, you must install the sshpass program",则进行安装: sudo apt-get install sshpass
# 报错2:FAILED - RETRYING: [node1]: Download_file | Download item (4 retries left)
# 解决2:网络不咋好,能访问外网,多次试一试。
# 报错3:/usr/local/kubespray/kubespray-2.26.0/inventory/mycluster/credentials): [Errno 13] 权限不够:
# 解决3:在ansible主机上,
sudo mkdir -p /usr/local/kubespray/kubespray-2.26.0/inventory/mycluster/credentials
sudo chown -R $(whoami) /usr/local/kubespray/kubespray-2.26.0/inventory/mycluster/credentials
3、访问dashboard
dashboard可以查看kubernetes系统的整体情况
# 查看版本:
kubectl version
# 查看节点、service、pod
kubectl get node -o wide
kubectl get services
kubectl get services --all-namespaces
kubectl get pods --all-namespaces # 都是运行的
**登录k8s机器:**增加RBAC,为了访问dashboard页面
tee admin-user.yaml <<-'EOF'
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kube-system
EOF
tee admin-user-role.yaml <<-'EOF'
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
EOF
创建ServiceAccount和ClusterRoleBinding:
kubectl create -f admin-user.yaml && kubectl create -f admin-user-role.yaml
3.1、创建dashboard
下载链接:https://github.com/kubernetes/dashboard/tree/v2.7.0
# 创建命名空间
kubectl create namespace kubernetes-dashboard
# 部署 Kubernetes Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml -n kubernetes-dashboard
# 检查部署状态
kubectl get pods -n kubernetes-dashboard # 也变成了Running
3.2、配置服务
# 将kubernetes-dashboard这个服务的类型从ClusterIP改为NodePort
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard \
-p '{"spec":{"type":"NodePort","ports":[{"port":443,"targetPort":8443,"nodePort":30443,"protocol":"TCP"}]}}'
# 查看是否改成了NodePort
kubectl get service --all-namespaces
# 获取登录页面的token:
kubectl -n kube-system create token admin-user # 输出就是token
浏览器输入:https://192.168.10.12:30443/
参考链接:https://blog.youkuaiyun.com/boling_cavalry/article/details/109897735