【云原生 三】K8S 环境部署
【云原生 六】K8S 集群下 kubesphere 云平台部署安装
一、环境准备
本次环境操作是基于VMware® Workstation 16 Pro 的虚拟机环境进行搭建的。当然,如果你有足够的linux机器,那就更好了,本实例都是在ubuntu系统root用户下进行的操作。
本实例安装过程中各软件版本如下:
ubuntu 22.04,docker 20.10.18,k8s v1.26.1,containerd 1.6.16,dashboard 2.7.0,calico v3.25.0。
如果是在k8s的分布式环境下推荐使用容器containerd,不需要安装docker。
在VMware中创建三个虚拟机,网络配置使用桥接模式,桥接到当前物理主机的活动网卡上(如下图)。
每个虚拟机上安装 ubuntu-22.04-desktop-amd64.iso 操作系统,每台机器配置如下:内存:8G,处理器:4核,硬盘50G。
分别在三台虚拟机linux系统中执行命名,设置主机名称:
第一台:sudo hostnamectl set-hostname "ubuntu-one"
第二台:sudo hostnamectl set-hostname "ubuntu-two"
第三台:sudo hostnamectl set-hostname "ubuntu-three"
最终如下:
三个虚拟机的网络ip配置如下(关于虚拟机网络地址的配置可以参考:https://www.cnblogs.com/hewei-blogs/articles/16697347.html):
机器ip 主机名
10.53.207.10 ubuntu-one
10.53.207.11 ubuntu-two
10.53.207.12 ubuntu-three
并在每台虚拟机中设置主机IP映射:编辑 /etc/hosts 文件,添加如下红框中内容:
在这里将Ubuntu-one作为master节点,另外两个虚拟机作为 node 节点。
以下步骤二、三、四 需要在每台机器上都进行操作。也可以在一台虚拟机上操作二、三、四步骤,然后复制出另外两个虚拟机。
二、部署前期的配置
1、升级系统软件:
sudo apt update sudo apt -y full-upgrade [ -f /var/run/reboot-required ] && sudo reboot -f
2、禁用swap交换空间、禁用防火墙、关闭安全限制。
# 关闭交换空间
sudo swapoff -a # 永久禁用。-i 插入修改模式,g 标识符表示全局查找替换,表示注释掉swap的那一行。 sudo sed -i '/swap/ s/^\(.*\)$/#\1/g' /etc/fstab # 查看禁用状态 free -h
#关闭防火墙 sudo ufw disable #查看状态,inactive 表示已关闭 sudo ufw status
# Ubuntu安全软件的限制,可能导致节点处于notReady状态,所以需要关闭
# 停止安全应用 apparmor
systemctl stop apparmor
# 禁用安全限制
systemctl disable apparmor
3、进行一些内核配置
# 开启内核功能 sudo tee /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF sudo modprobe overlay sudo modprobe br_netfilter
# 添加系统配置,将桥接的Ipv4流量传递到iptables链 sudo tee /etc/sysctl.d/kubernetes.conf<<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF
# 重新加载 sysctl sudo sysctl --system
三、安装 containerd
1、配置ubuntu系统国内阿里的软件源:
# 备份软件源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 编辑软件源 sudo gedit /etc/apt/sources.list
在打开的文件中添加下面内容:
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# 更新系统软件 sudo apt update sudo apt upgrade
# 安装依赖软件 sudo apt install -y curl gnupg2 software-properties-common apt-transport-https ca-certificates
2、安装docker的阿里云的仓库
# 安装GPG证书 sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/docker.gpg sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
3、安装containerd
sudo apt update sudo apt install -y containerd.io
containerd config default | sudo tee /etc/containerd/config.toml >/dev/null 2>&1 # 配置 containerd 用systemdcgroup启动,SystemdCgroup = true sudo sed -i 's/SystemdCgroup \= false/SystemdCgroup \= true/g' /etc/containerd/config.toml # 配置 containerd 使用阿里云镜像,将 registry.k8s.io 改为 registry.aliyuncs.com/google_containers
# 旧版本 sudo sed -i 's/k8s.gcr.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
# 新版本 sudo sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
sudo systemctl restart containerd sudo systemctl enable containerd
四、安装kubernetes组件Kubectl, kubeadm & kubelet
1、添加 k8s 的阿里云仓库支持
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - sudo apt-add-repository "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" apt update
2、安装 k8s 组件
sudo apt install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl #apt-mark 用于将软件包标记/取消标记为自动安装。 hold 选项用于将软件包标记为保留,以防止软件包被自动安装、升级或删除。
安装指定版本:
apt install -y kubelet=1.26.1 kubeadm=1.26.1 kubectl=1.26.1
五、初始化安装 k8s (在master节点:ubuntu-one)
sudo kubeadm init --control-plane-endpoint=ubuntu-one --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version v1.26.1
如下示例图片标识则安装成功(只是示例图片):
安装成功后执行的脚本(此处的脚本要根据自己安装成功后的实际脚本执行,此处是示例脚本):
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl cluster-info kubectl get nodes
六、添加节点
1、node 节点的添加(在需要添加的机器节点:ubuntu-two,ubuntu-three 上执行,此处的脚本要根据自己安装成功后的实际token执行,此处是示例脚本)
kubeadm join ubuntu-one:6443 --token 6uws8m.7lopvxw3zk6koxj3 \ --discovery-token-ca-cert-hash sha256:b2f18cb18a0925e7abf3d50a07b3d8ba0cbe1c90754ad774b756da3518bcd7e4
在master上查看添加的节点
kubectl get nodes
如果安装完成后生成的token过期(默认有效期24小时),则添加新节点时需要重新生成token。
在master上生成新的token(master节点执行)
kubeadm token create --print-join-command
输出类似下面的内容(node节点需要执行的命令)
kubeadm join 10.53.207.10:6443 --token 7dwluq.x6nypje7h55rnrhl \ --discovery-token-ca-cert-hash sha256:fa75619ab0bb6273126350a9dbda9aa6c89828c2c4650299fe1647ab510a7e6c
在需要加入集群的节点服务器上执行上面的命令就可以将node节点加入k8s集群中。
2、master 节点的添加
生成key信息,假设生成的key为:06802737a89f229bcae1ae15e46bb46d85dcb78c2f7a71d9963127f8dbb53f9c(当前master节点执行)
kubeadm init phase upload-certs --upload-certs
生成节点加入命令(当前master节点执行)
kubeadm token create --print-join-command
在需要加入集群的节点上执行命令,通过在添加节点命令后添加 --control-plane --certificate-key 参数,将当前节点当做master节点加入集群。--certificate-key 的参数就是上面第一步生成的key值。
kubeadm join 10.53.207.10:6443 --token y9oz6v.vc9n8qlthfjorc4l \ --discovery-token-ca-cert-hash sha256:8bf00e03624031ed8354872dc7a2d6462d3b925807c16544b7243922fc9c209c \ --control-plane \ --certificate-key 06802737a89f229bcae1ae15e46bb46d85dcb78c2f7a71d9963127f8dbb53f9c
七、安装相关的插件
1、calico 网络插件(master:ubuntu-one节点)
curl https://projectcalico.docs.tigera.io/manifests/calico.yaml -O
kubectl apply -f calico.yaml
kubectl get pods -n kube-system
如果下载特定版本的calico,则如下:
wget https://docs.projectcalico.org/v3.25.0/manifests/calico.yaml --no-check-certificate
2、dashboard安装 (master:ubuntu-one节点)
下载安装文件:
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
修改下载的 recommended.yaml 文件,添加配置,使支持外网访问。
gedit recommended.yaml
添加属性 type: NodePort,并且指定 nodePort 的值,如下图。
安装:
kubectl apply -f recommended.yaml
查看:
kubectl get pods -n kubernetes-dashboard -o wide
# 创建dashboard用户,用户名:dashboard-admin cat<<EOF | kubectl apply -f - apiVersion: v1 kind: ServiceAccount metadata: name: dashboard-admin namespace: kube-system EOF
# 创建dashboard的token cat<<EOF | kubectl apply -f - apiVersion: v1 kind: Secret type: kubernetes.io/service-account-token metadata: name: dashboard-admin namespace: kube-system annotations: kubernetes.io/service-account.name: "dashboard-admin" EOF
# 绑定默认cluster-admin管理员集群角色
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 查看 Secret 详细详细
kubectl describe secrets dashboard-admin -n kube-system
使用token 进行登录:
八、k8s验证
创建服务:
kubectl create deployment nginx-app --image=nginx --replicas=2 kubectl get deployment nginx-app
暴露服务:
kubectl expose deployment nginx-app --type=NodePort --port=80
查看服务详细信息:
kubectl get svc nginx-app
kubectl describe svc nginx-app
测试:
curl ubuntu-one:32339
九、节点卸载与删除 && k8s 卸载
卸载节点
kubectl drain <nodename> --delete-local-data --force --ignore-daemonsets
删除节点
kubectl delete node <nodename>
也可以通过在需要删除的节点上执行命令进行删除:kubeadm reset
停止和卸载 containerd及相关服务
systemctl stop containerd sudo apt purge --auto-remove containerd.io
停止相关服务
systemctl stop kubelet
systemctl stop etcd
systemctl stop docker
彻底删除相关服务及配置文件
kubeadm reset -f sudo apt purge --auto-remove kubernetes-cni sudo apt purge --auto-remove kubeadm sudo apt purge --auto-remove kubectl sudo apt purge --auto-remove kubelet
删除遗留文件
rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm -rf /var/lib/etcd rm -rf /var/etcd apt clean all apt remove kube*
使用dpkg查看k8s管理服务
dpkg -l | grep kube
最终进行清理
find / -name kube* -delete find / -name kube* | xargs rm -rf find / -name kube* | xargs rmdir
总结:在安装过程中遇到了很多问题,最终总结汇总的安装步骤,希望各位大佬批评指正。
原创文章,引用请指明出处,谢谢!
原文链接:https://www.cnblogs.com/hewei-blogs/articles/17096351.html
本文来自博客园,作者:蓝迷梦,转载请注明原文链接:https://www.cnblogs.com/hewei-blogs/articles/17096351.html