部署k8s详细步骤(避坑版)

部署k8s详细步骤(避坑版)

一、docker部署

1.命令一键安装(公网)
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
2.启动并查看docker状态

systemctl enable docker && systemctl start docker
#设置自启并启动docker
systemctl daemon-reload
#守护进程重启
systemctl restart docker
#重启docker服务
systemctl status docker 
#查看docker运行状态

3.设置镜像加速(相关镜像仓库可以到阿里云开通)

vim /etc/docker/daemon.json
{
   "registry-mirrors" : ["https://3inj6g9f.mirror.aliyuncs.com"]
}

4.修改docker驱动,默认是cgroup,需要改成systemd

docker info | grep Cgroup
vim /usr/lib/systemd/system/docker.service
# 在ExecStart命令中添加
--exec-opt native.cgroupdriver=systemd
systemctl daemon-reload
#重置守护进程
systemctl restart docker
#重启docker服务
docker info | grep Cgroup
#查看docker驱动

5.卸载docker

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

若是卸载不干净可以运行以下命令

(1)删除docker所在目录

rm -rf /etc/docker

rm -rf /run/docker

rm -rf /var/lib/dockershim

rm -rf /var/lib/docker

(2)Kill掉Docker进程

ps -ef|grep docker

kill -9 pid

(3)卸载docker相关包

yum list installed | grep docker
#查询相关包
#把匹配到的包执行 yum remove 删除

(4)查看docker是否卸载成功,为空就是卸载成功

docker version

二、k8s部署

1.配置k8s的yum源

vim /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

2.安装kubectl、kubelet、kubeadm,设置kubelet开机启动,启动kubelet

yum install -y kubectl-1.20.5 kubelet-1.20.5 kubeadm-1.20.5
systemctl enable kubelet
systemctl start kubelet

3.初始化kubernetes集群(里面的版本必须对应安装的软件包版本)

kubeadm init --apiserver-advertise-address=0.0.0.0 \
--apiserver-cert-extra-sans=127.0.0.1 \
--image-repository=registry.aliyuncs.com/google_containers \
--ignore-preflight-errors=all \
--kubernetes-version=v1.20.5 \
--service-cidr=10.10.0.0/16 \
--pod-network-cidr=10.18.0.0/16
--v=5      
#--v=5不添加这个可能存在版本要求大于等于5的报错

kubeadm config images list

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node
kubectl get pod --all-namespaces

此时查看node节点为NotReady状态,因为coredns pod没有启动,缺少网络pod

4.安装calico网络

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
报错的话用下面的命令下载后运行命令
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O

vim calico.yaml

将文件内容复制到calico.yaml

安装好之后可以通过kubectl get pods --all-namespaces查看pods状态

1

如果calico-node没有处于ready,可以通过kubectl describe pod/calico-node-cwr85 -n kube-system查看错误信息

calico解决方法
step 1

修改网络插件vim calico.yaml

搜索 autodetect

- name: IP
  value: "autodetect"

在其后面添加如下行

# 在其后面添加如下行
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens*"

修改之后样式

# 修改之后样式
 # Auto-detect the BGP IP address.
 - name: IP
    value: "autodetect"
 - name: IP_AUTODETECTION_METHOD
    value: "interface=ens*"
step 2

搜索 v1beta1 , 移除 beta1 , 调整如下
修改前

apiVersion: policy/v1beta1
kind: PodDisruptionBudget

修改后

apiVersion: policy/v1
kind: PodDisruptionBudget

应用

kubectl apply -f calico.yaml
  • 因为calico默认是检测Ethernet网卡,如果服务器是ens, 需要修改一下检测正则表达式,以致于能够找到正确的ip。
  • v1beta1 修改为 v1, 意味着升级为v1版本, 不会抛出WARNNING。

5.安装部署dashboard(可视化页面)

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.3.1/aio/deploy/recommended.yaml

vim recommended.yaml

将文件内容复制到recommended.yaml里,并用命令安装。

#设置访问端口
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard
#type: ClusterIP 改为 type: NodePort

kubectl get svc -A |grep kubernetes-dashboard
# 找到端口,在安全组放行

创建访问账号

#创建访问账号,准备一个yaml文件; vi dash.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 dash.yaml

#获取访问令牌
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}}"

6.安装metrics

vim metrics.yaml

将文件内容复制到metrics.yaml里,并用命令安装。

kubectl apply -f metrics.yaml

正常情况下master节点是运行不起来的。

原因:kubeadm集群时,出于安全考虑Pod不会被调度到Master Node上,默认情况下,master打了污点,不参与工作负载; 解决方案:手动删除master的污点;

  • 查看污点信息 命令:kubectl get no -o yaml | grep taint -A 5
  • 删除master节点污点 命令kubectl taint nodes --all node-role.kubernetes.io/master-
  • 再次开启master节点污点 命令kubectl taint nodes k8s node-role.kubernetes.io/master=true:NoSchedule

等待一会在页面查看

2

7.卸载k8s

yum remove -y kubelet kubeadm kubectl
kubeadm reset -f
modprobe -r ipip
lsmod
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
posted @ 2022-12-16 16:04  形码客  阅读(873)  评论(0)    收藏  举报