所有Node的操作

  1. 统一配置 /etc/hosts 相互之间host名称
  2. 关闭所有机器的swap分区
  3. 关闭swap, 为了避免POD假死
sudo swapoff -a   //临时生效
#修改/etc/fstab,注释掉swap行
sudo vi /etc/fstab   //重启也生效

其他

#统一时间
sudo timedatectl set-timezone Asia/Shanghai
#系统日志服务立即生效
sudo systemctl restart rsyslog

安装docker服务

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

参考:https://docs.docker.com/engine/install/ubuntu/ 

统一安装kubeadm和kubelet工具

sudo apt-get install -y curl

curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add -

# 此处使用 kubernetes-xenial 而不是 Ubuntu 20.04 的focal
echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet=1.23.9-00 kubeadm=1.23.10-00 kubectl=1.23.9-00

因为1.24版本之后,k8s弃用了docker,改用cri

创建/etc/docker/daemon.json文件,写入如下配置

{
    "exec-opts": [
        "native.cgroupdriver=systemd"
    ]
}

启动相关服务

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl start kubelet

初始化master节点

初始化kubeadm

sudo kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=172.16.0.0/16
# 如果报错的话执行重置命令
sudo kubeadm reset
sudo kubeadm init --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --pod-network-cidr=172.16.0.0/16

初始化以后,按照日志提示:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

创建网络

wget https://docs.projectcalico.org/v3.21/manifests/calico.yaml
# 找到 calico.yaml文件中内容为 name: CALICO_IPV4POOL_CIDR 的配置
# 启用该配置,并且设置 value: "172.16.0.0/16"(匹配kubeadm init命令中的"--pod-network-cidr=172.16.0.0/16"参数)

# 使用该配置
kubectl apply -f calico.yaml

添加worker结点

在其他worker节点执行保存的join命令

#类似于
kubeadm join 192.168.0.221:6443 --token w41cvr.5jzuvpr5y70bawnw --discovery-token-ca-cert-hash sha256:e0f34d8d73b6820ef804a2d5c3b081b0bc1ea29ed19392e405a4aedba916cb07

参考文章

https://www.cnblogs.com/pluse/p/16219500.html

安装dashboard

安装只需要一条命令:

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

验证一下成功了没

kubectl get pods -n kubernetes-dashboard

默认的网络是clusterIP, 外网是无法访问的,修改为NodePort才可以

# 将type: ClusterIP 改为 type: NodePort
kubectl edit svc kubernetes-dashboard -n kubernetes-dashboard

改完后查看一下端口:

kubectl get svc -n kubernetes-dashboard

需要创建账号

vim dash.yaml

默认的用户名是admin-user

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

获取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}}"

参考文章:https://blog.csdn.net/zhou920786312/article/details/135325870

修改完还是无法访问,因为默认的Https有问题。页面打不开。

需要改一下证书

#这个也是一种生成证书的一种方式,第二条命令IP根据自己情况改为NodeIp:
openssl genrsa -out dashboard.key 2048 
openssl req -new -out dashboard.csr -key dashboard.key -subj '/CN=10.0.0.10'
openssl x509 -req -days 3650 -in dashboard.csr -signkey dashboard.key -out dashboard.crt

删除原有的证书

kubectl delete secret kubernetes-dashboard-certs -n kubernetes-dashboard

添加自己的证书

kubectl create secret generic kubernetes-dashboard-certs --from-file=dashboard.key --from-file=dashboard.crt -n kubernetes-dashboard

重启POD

kubectl get pod -n kubernetes-dashboard  | grep dashboard
#查出来 POD名称
kubectl delete pod kubernetes-dashboard-78cb679857-x4hpw -n kubernetes-dashboard

现在在最下面就会有继续访问的链接了

参考文章:https://blog.csdn.net/qq_35078688/article/details/130662916

登录控制台查看kube-system里的所有POD,如果有报错像这样的情况

Readiness probe failed: calico/node is not ready: BIRD is not ready: Error querying BIRD: unable to connect to BIRDv4 socket: dial unix /var/run/calico/bird.ctl: connect: connection refused 

控制台上calico node running 但是不ready 那么就是因为获取不到宿主机的IP地址导致;查看一下IP地址的网卡前缀假如是ens1

ifconfig

那么在calico.yaml里添加两行,位置如下代码部分所示:

  • name: IP_AUTODETECTION_METHOD value: "interface=ens.*"
[root@master01 ~]# vi calico.yaml
# Cluster type to identify the deployment type
- name: CLUSTER_TYPE
  value: "k8s,bgp"
#新增两行配置
- name: IP_AUTODETECTION_METHOD
  value: "interface=ens.*"
# Auto-detect the BGP IP address.
- name: IP
  value: "autodetect"
# Enable IPIP
- name: CALICO_IPV4POOL_IPIP
  value: "Always"

然后保存,删除原来的配置,执行新的配置。

rm -rf /var/lib/cni
kubectl apply -f calico.yaml

参考文章:https://blog.51cto.com/u_8355320/2926996