所有Node的操作
- 统一配置 /etc/hosts 相互之间host名称
- 关闭所有机器的swap分区
- 关闭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