使用kubeadm创建集群
基础环境
- 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
- 2 CPU 核或更多
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
- 设置防火墙放行规则
- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
- 设置不同hostname
- 开启机器上的某些端口。
- 参考详细信息:https://kubernetes.io/zh/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#check-required-ports
- 内网互信
- 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
- 永久关闭
安装
Centos下安装
-
首先安装Docker,参考网址:https://blog.csdn.net/qq_43556844/article/details/120604383
-
所有机器都需要执行的命令
# 各个机器设置自己的域名 # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字 hostname # 修改 hostname hostnamectl set-hostname xxxx # 查看修改结果 hostnamectl status # 设置 hostname 解析 echo "127.0.0.1 $(hostname)" >> /etc/hosts # 关闭防火墙 systemctl stop firewalld systemctl disable firewalld systemctl status firewalld # 将 SELinux 设置为 permissive 模式(相当于将其禁用) sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config #关闭swap swapoff -a sed -ri 's/.*swap.*/#&/' /etc/fstab #允许 iptables 检查桥接流量 cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter EOF cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sudo sysctl --system
-
安装kubelet、kubeadm、kubectl
- kubeadm:用来初始化集群的指令。
- kubelet:在集群中的每个节点上用来启动 Pod 和容器等。
- kubectl:用来与集群通信的命令行工具。
# 设置kubernetes镜像源 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF sudo yum install -y kubelet-1.21.11 kubeadm-1.21.11 kubectl-1.21.11 --disableexcludes=kubernetes sudo systemctl enable --now kubelet
kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环
以上部分都是初始化操作,可以制作成一个基础镜像,别的节点直接克隆该进行就可以,不用再重复进行了。- 添加主机点域名映射(可选),加入后方便之后用域名去访问主节点
#所有机器添加master域名映射,以下需要修改为自己的 echo "主机点ip 主节点域名" >> /etc/hosts
- 主节点初始化
# 新手建议使用这个 kubeadm init \ --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \ --control-plane-endpoint "主节点ip:6443" \ --upload-certs 当对kubernets有了一定了解的话,可以用以下命令 #主节点初始化 kubeadm init \ --apiserver-advertise-address=172.31.0.4 \ --control-plane-endpoint=主节点ip:6433 \ --image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \ --kubernetes-version v1.21.11 \ --service-cidr=10.96.0.0/16 \ --pod-network-cidr=192.168.0.0/16 #所有网络范围不重叠
- 之后会有如下提示
To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ You can now join any number of control-plane nodes by copying certificate authorities and service account keys on each node and then running the following as root: kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \ --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9 \ --control-plane Then you can join any number of worker nodes by running the following on each as root: kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \ --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9
- 根据以上提示依次使用如下命令
# 在主节点执行 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
安装网络组件
calico官网curl https://docs.projectcalico.org/manifests/calico.yaml -O kubectl apply -f calico.yaml
-
节点加入
# 注意以下这两个命令使用自己提示的 # 主机点加入使用 kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \ --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9 \ --control-plane # 子节点加入使用 kubeadm join cluster-endpoint:6443 --token 1rgwtb.nke24ryqmbw2y17o \ --discovery-token-ca-cert-hash sha256:394e577724a677e89551c282547881ac0f020db3a1773177f9d454a9f0db26f9
-
验证集群
- 验证集群节点状
kubectl get nodes
Ubuntu下安装
-
首先安装Docker,参考网址:https://blog.csdn.net/qq_43556844/article/details/120604383
-
-所有机器都需要执行的命令
# 各个机器设置自己的域名 # 此处 hostname 的输出将会是该机器在 Kubernetes 集群中的节点名字 hostname # 修改 hostname hostnamectl set-hostname xxxx # 查看修改结果 hostnamectl status # 设置 hostname 解析 echo "127.0.0.1 $(hostname)" >> /etc/hosts # 关闭防火墙 ufw disable setenforce 0 # 重置路由表 iptables -P FORWARD ACCEPT echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables # 关闭交换分区 swapoff -a # 还要修改/etc/fstab文件注释掉swap分区
- 设置镜像源
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main EOF # 安装 sudo yum install -y kubelet-1.21.11 kubeadm-1.21.11 kubectl-1.21.11 --disableexcludes=kubernetes sudo systemctl enable --now kubelet
- 主节点初始化
kubeadm init \ --image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \ --control-plane-endpoint "主节点ip:6443" \ --upload-certs
- 根据以上提示依次使用如下命令
# 在主节点执行 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 安装网络插件
# weave - kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" # flannel # kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署dashboard
- 部署
- kubernetes官方提供的可视化界面,参考网址:https://github.com/kubernetes/dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml
- 设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard # 将type: ClusterIP 改为 type: NodePort
- Dashboard部署完成后,就可以访问 https://集群任意IP:端口 https://集群ip:32759
- 但是目前Kubernetes Dashboard ,只支持使用 Bearer Token登录。 由于 Kubernetes Dashboard 默认部署时,只配置了最低权限的RBAC。因此,我们要创建一个名为 admin-user 的 ServiceAccount,再创建一个 ClusterRolebinding,将其绑定到 Kubernetes 集群中默认初始化的 cluster-admin 这个 ClusterRole。
- 创建 Service Account 和 ClusterRoleBinding
- 使用 kubeadm 安装集群时,默认创建了 ClusterRole cluster-admin。此时我们可以直接为刚才的 ServiceAccount 创建 ClusterRoleBinding。
- 创建一个管理员用户
#创建访问账号,准备一个yaml文件; vi admin-user.yaml apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kubernetes-dashboard --- 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: kubernetes-dashboard
kubectl apply -f admin-user.yaml
部署- 获取管理员用户的Token
- 令牌访问
#获取访问令牌 kubectl -n kubernetes-dashboard get secret $(kubectl -n kubernetes-dashboard get sa/admin-user -o jsonpath="{.secrets[0].name}") -o go-template="{{.data.token | base64decode}}"
- 保存生成的token,之后登录使用token令牌方式登录
- Dashboard部署完成后,就可以访问 https://集群任意IP:端口 https://集群ip:32759
Kubernets管理工具kuboard
参考:https://kuboard.cn/install/v3/install-in-k8s.html#%E5%AE%89%E8%A3%85
- 在Kubernets中安装kuboard
kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3.yaml
# 您也可以使用下面的指令,唯一的区别是,该指令使用华为云的镜像仓库替代 docker hub 分发 Kuboard 所需要的镜像
# kubectl apply -f https://addons.kuboard.cn/kuboard/kuboard-v3-swr.yaml
- 等待 Kuboard v3 就绪
- 执行指令 watch kubectl get pods -n kuboard,等待 kuboard 名称空间中所有的 Pod 就绪
- 访问 Kuboard
- 在浏览器中打开链接 http://your-node-ip-address:30080
- 输入初始用户名和密码,并登录
- 用户名: admin
- 密码: Kuboard123
一些基础命令:
#查看集群所有节点
kubectl get nodes
#根据配置文件,给集群创建资源
kubectl apply -f xxxx.yaml
#查看集群部署了哪些应用?
docker ps === kubectl get pods -A
# 运行中的应用在docker里面叫容器,在k8s里面叫Pod
kubectl get pods -A
# 新令牌(即加入的主节点中时候的命令)
kubeadm token create --print-join-command
# 移除 worker 节点
# 在准备移除的 worker 节点上执行
# 重置
kubeadm reset
# 在第一个 master 节点上执行
kubectl delete node demo-worker-x-x
# 为节点设置标签
kubectl label node <node-name> node-role.kubernetes.io/worker=worker
# 设置master为可执行node节点(可选),默认是主节点是不能安装pod的
kubectl taint nodes --all node-role.kubernetes.io/master-
# 配置ApiServer SSL证书
grep 'client-certificate-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.crt
grep 'client-key-data' ~/.kube/config | head -n 1 | awk '{print $2}' | base64 -d > kubecfg.key
openssl pkcs12 -export -clcerts -inkey kubecfg.key -in kubecfg.crt -out kubecfg.p12 -name "kubernetes-client"
使用sealos进行一键部署
基于WSL2和Kind或Minikube:搭建Windows版Kubernetes
参考网址:
https://blog.csdn.net/fly910905/article/details/106679756
https://zhuanlan.zhihu.com/p/426227999