通过kubeadm部署一个k8s集群
1 安装前准备
具体步骤参见 我的另一篇博文。Linux安装Docker、K8s(环境准备和Docker安装)
cat <
2 添加阿里云yum软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
3 安装kubeadm和kubelet
版本号最好选择一个稳定版本,文档使用的是1.21.3
yum install -y kubelet-1.21.3 kubeadm-1.21.3
systemctl enable kubelet
4 部署master节点
在Master节点上输入执行以下命令:
kubeadm init
--apiserver-advertise-address=192.168.XXX.xxx
--image-repository registry.aliyuncs.com/google_containers
--kubernetes-version v1.21.3
--service-cidr=10.96.0.0/12
--pod-network-cidr=10.244.0.0/16
--ignore-preflight-errors=all
参数说明
初始化完成后,最后会输出一个join命令,先记住,下面用。
Your Kubernetes control-plane has initialized successfully!
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/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.xxx.xxx:6443 --token 46ok5q.cnv0yj8p1arec3is --discovery-token-ca-cert-hash sha256:0cae5db1df5fc4796147583f25750faeec420bd82fb8cb7b2b4121d4d4a0066e
5.加入kubernetes node
在Node节点(示例中为192.168.xxx.xxx,192.168.xxx.xxx)上执行。
向集群添加新节点,执行之前记录的kubeadm join命令:
kubeadm join 192.168.xxx.xxx:6443 --token 46ok5q.cnv0yj8p1arec3is --discovery-token-ca-cert-hash sha256:0cae5db1df5fc4796147583f25750faeec420bd82fb8cb7b2b4121d4d4a0066e
6 部署容器网络
Calico是目前Kubernetes主流的网络方案。wget https://docs.projectcalico.org/manifests/calico.yaml,以下载yaml。需要修改字段CALICO_IPV4POOL_CIDR,与前面kubeadm init命令中的 --pod-network-cidr参数一样。
修改完后文件后
kubectl apply -f calico.yaml
执行部署容器网络。稍等几分钟,然后执行kubectl get pods -n kube-system查看部署进度。等Calico Pod都Running,节点也会准备就绪。
7 查看kubernetes集群
查看集群信息
查看集群节点信息
8 部署控制台
Dashboard是官方提供的一个UI,可用于基本管理K8s资源,dashboard GitHub地址https://github.com/kubernetes/dashboard。如果GitHub访问较慢,可以参考我的另一篇文章GitHub 加速器(Watt Toolkit)
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.6.0/aio/deploy/recommended.yaml
默认Dashboard只能集群内部访问,vi recommended.yaml修改Service类型为NodePort,方便集群外的机器访问。
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kubernetes-dashboard
spec:
ports:
- port: 443
targetPort: 8443
nodePort: 30443
selector:
k8s-app: kubernetes-dashboard
type: NodePort
kubectl apply -f recommended.yaml
kubectl get pods -n kubernetes-dashboard
待所有pod处于running的状态后,创建serviceaccount并绑定默认cluster-admin管理员集群角色:
# 创建用户
kubectl create serviceaccount dashboard-admin -n kube-system
# 用户授权
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
# 获取用户Token
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')
测试访问:https://192.168.xxx.xxx:30443,复制token后填入,进行登录。
9 部署问题
detected "cgroupfs" as the Docker cgroup driver. The recommended driver is "systemd". Please follow the guide at
[WARNING IsDockerSystemdCheck]: detected “cgroupfs” as the Docker cgroup driver. The recommended driver is “systemd”. Please follow the guide at https://kubernetes.io/docs/setup/cri/
Docker的驱动程序cgroup,修改为systemd驱动,修改前 通过
docker info | grep cgrou
查看他的驱动信息(原来标红的是cgroupfs)
执行以下命令
vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}
重启后查看docker systemctl restart docker
The connection to the server localhost:8080 was refused - did you specify the right host or port?解决
各个节点执行kubectl --version且报错如下
Unable to connect to the server: net/http: TLS handshake timeout
但是只有master节点执行各种命令延迟较高,其他node节点正常,通过命令 free -m 发现主节点只有45M内存,意识到可能是给虚拟机的内存分小了(虚拟机分了2G),给虚拟机新增1G内存就解决了
# 重启kubelet服务
systemctl daemon-reload
systemctl restart kubelet
页面更新:2024-04-19
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号