Linux安装Docker、K8s(kubeadm部署k8s集群)

通过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,节点也会准备就绪。

Linux安装Docker、K8s(kubeadm部署k8s集群)

7 查看kubernetes集群

查看集群信息

Linux安装Docker、K8s(kubeadm部署k8s集群)

查看集群节点信息

Linux安装Docker、K8s(kubeadm部署k8s集群)

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)

Linux安装Docker、K8s(kubeadm部署k8s集群)

执行以下命令

vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}

重启后查看docker systemctl restart docker

Linux安装Docker、K8s(kubeadm部署k8s集群)

The connection to the server localhost:8080 was refused - did you specify the right host or port?解决
  • 原因:kubernetes master没有与本机绑定,集群初始化的时候没有绑定,此时设置在本机的环境变量即可解决问题。
  • 解决:vim /etc/profile,在底部增加新的环境变量 export KUBECONFIG=/etc/kubernetes/admin.conf
  • 最后执行source /etc/profile 让新增的环境变量生效。

各个节点执行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

标签:集群   可能会   节点   绑定   虚拟机   命令   内存   地址   网络   信息

1 2 3 4 5

上滑加载更多 ↓
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top