本文内容具有时效性,过于久远时仅供参考
编辑于2022年3月16日,于互联网整理
2022年10月24日修改
本机部署环境:
centos7.9 4c8g
kubernetes1.21
KubeSphere 3.2.1
docker-ce 20.10.13 和 docker-compose 1.29.2 为当时最新
基本环境配置
因为通过yum安装的docker是比较旧的版本,所以需要手动安装最新的docker。
安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新并安装docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
安装docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
#要安装全其他版本需替换1.29.2为相应版本号
sudo chmod +x /usr/local/bin/docker-compose #添加docker-compose可执行权限
关闭selinux和交换分区
vi /etc/fstab
# 将swap注释掉,没有swap就不管了
vi /etc/selinux/config #打开selinux的设置文件
#将 SELINUX=enforcing 改为 SELINUX=disabled
# 然后重启
设置hostname
hostnamectl set-hostname k8s-master
设置桥接流量对iptables可见
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
#验证生效,返回1即为生效
sysctl -n net.bridge.bridge-nf-call-iptables
sysctl -n net.bridge.bridge-nf-call-ip6tables
修改cgroup驱动为systemd[k8s官方推荐]、限制容器日志量、修改存储类型
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"registry-mirrors": ["https://mirrors.tuna.tsinghua.edu.cn/"], #该项为docker镜像加速地址,不需要的可以去掉
"data-root": "/data/docker" #该项为docker的数据存储位置,不需要的可以去掉
}
EOF
#没有/etc/docker/需要手动创建
开启docker服务和设置开机自启动
systemctl enable --now docker
systemctl daemon-reload
systemctl restart docker
部署kubernetes
添加kubernetes源,官网给的源是空的,所以用阿里的
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
重建yum缓存,输入y添加证书认证
yum makecache fast #执行后报错,不用管,阿里解释:由于官网未开放同步方式, 可能会有索引gpg检查失败的情况.
安装指定版本的三件套:kubelet kubeadm kubectl
yum install -y --nogpgcheck kubelet-1.21.0-0 --disableexcludes=kubernetes
yum install -y --nogpgcheck kubeadm-1.21.0-0 --disableexcludes=kubernetes
yum install -y --nogpgcheck kubectl-1.21.0-0 --disableexcludes=kubernetes
开启kubelet服务和开机自启
systemctl enable kubelet && systemctl start kubelet
配置bash自动补全命令
#安装bash自动补全插件
yum install bash-completion -y
#设置kubectl与kubeadm命令补全,退出ssh,重新登录生效
kubectl completion bash >/etc/bash_completion.d/kubectl
kubeadm completion bash > /etc/bash_completion.d/kubeadm
初始化kubernetes集群,选需要的执行
kubeadm init \
--apiserver-advertise-address=192.168.50.1 \ #本机IP
--image-repository registry.aliyuncs.com/google_containers \ #指定拉取镜像地址:阿里,国外忽略
--kubernetes-version v1.21.0 \ 指定版本
--service-cidr=10.96.0.0/12 \ #为服务的虚拟 IP 地址另外指定, IP地址段默认10.96.0.0/12
--pod-network-cidr=10.244.0.0/16 #指明 pod 网络可以使用的IP地址段, 10.244.0.0/16是flannel固定使用的IP段,设置取决于网络组件要求
#registry.aliyuncs.com/google_containers 无法使用,所以可以跟换其他地址或者不配置指定镜像地址
#我执行的
kubeadm init --apiserver-advertise-address=192.168.50.1 --kubernetes-version v1.21.0 --pod-network-cidr=10.110.0.0/16 --service-cidr=10.120.0.0/16
非root用户执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
root 用户执行
export KUBECONFIG=/etc/kubernetes/admin.conf
#永久添加环境变量
vi /etc/profile.d/kubernetes.sh
#然后写入export KUBECONFIG=/etc/kubernetes/admin.conf,并重新登录
kubeadm 对 admin.conf 中的证书进行签名时,将其配置为 Subject: O = system:masters, CN = kubernetes-admin。 system:masters 是一个例外的、超级用户组,可以绕过鉴权层(例如 RBAC)。 不要将 admin.conf 文件与任何人共享,应该使用 kubeadm kubeconfig user 命令为其他用户生成 kubeconfig 文件,完成对他们的定制授权。
安装网络附加组件
#下载calico网络模板文件
wget https://docs.projectcalico.org/v3.8/manifests/calico.yaml
#修改配置文件,在625行左右的192.168.0.0/16,修改为初始化配置的Ip段,比如我的10.120.0.0/16
vim calico.yaml
#修改好后,进行部署
kubectl apply -f calico.yaml
查看状态,看到状态全部Running就OK了
kubectl get pods --all-namespaces
创建本地存储卷,如果你有远程存储可以挂,可以忽略这个
cat > storage-class.yml <<EOF
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
EOF
#部署
kubectl create -f storage-class.yml
查看存储卷,有个名字叫local-storage的就算创建好了
kubectl get sc
设置默认存储卷
kubectl patch storageclass local-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
设置master也可以运行pod(单机运行)
kubectl taint nodes --all node-role.kubernetes.io/master-
部署kubesphere
以下安装为官方的最小安装
下载yaml,通过官方文档选择需要的组件.
#下载
wget https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml
wget https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/cluster-configuration.yaml
#部署
kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
查看安装日志
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l 'app in (ks-install, ks-installer)' -o jsonpath='{.items[0].metadata.name}') -f
#如果卡住了,执行一下最后面的卸载脚本,然后执行以下代码
#实测建议使用下面这种方式
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/kubesphere-installer.yaml
kubectl apply -f https://github.com/kubesphere/ks-installer/releases/download/v3.2.1/cluster-configuration.yaml
根据最后的日志输出,登录kubesphere
卸载或重置kubernetes
重置kubeadm 安装状态
#重置kubeadm
kubeadm reset
删除配置文件
rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
卸载
yum remove kubelet
yum remove kubeadm
yum remove kubectl
可选操作
#删除所有镜像
docker rmi $(docker images -q)
遇到的问题
kubernetes安装的时候,如果是用的flannel网络插件,会与contos7的默认防火墙firewalld冲突.在部署kubespere的时候出现以下错误,换 calico就好了
ERROR : Enable kube events for hooks error: Get "https://10.96.0.1:443/api?timeout=32s": dial tcp 10.96.0.1:443: connect: no route to host
安装完后看到有几个pod一直是pending
然后kubectl describe node 节点名字, 看了下
Allocated resources : (Total limits may be over 100 percent, i.e., overcommitted.)
我又看了眼官网的最低配置1c2g, 并确认我没有选择任何组件
..............
卸载
wget https://raw.githubusercontent.com/kubesphere/ks-installer/release-3.1/scripts/kubesphere-delete.sh && kubesphere-delete.sh

Comments NOTHING