本次安装在vmware虚拟机下开启3台2核2g的Ubuntu20.04系统
master:192.168.192.137
node1:192.168.192.136
node2:192.168.192.138
关闭防火墙
先查看防火墙状态,如果是关闭就不用管
ufw status
关闭selinux,如果没有安装selinux就不用管,下图就显示没有安装。
setenforce 0
分别修改三台主机的hostname,改成对应的名称:master,node1,node2
vim /etc/hostname
:
修改三台主机hosts文件
vim /etc/hosts
三台都需要添加
192.168.192.137 master
192.168.192.136 node1
192.168.192.138 node2
将桥接的IPv4流量传递到iptables的链
vim /etc/sysctl.d/k8s.conf
三台都要添加
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
使之生效
sysctl --system
设置单台主机的静态ip
查看路由表找到网关地址
route -n
在三台主机上分别配置静态ipv4地址
vim /etc/netplan/00-installer-config.yaml
network:ethernets:ens33:addresses: [192.168.192.137/24]dhcp4: falsegateway4: 192.168.192.2nameservers:addresses: [192.168.192.2,114.114.114.114]version: 2
使配置的ip地址生效
netplan apply
在三台主机上配置NTP时间同步
(设置时区)
timedatectl set-timezone Asia/Shanghai
apt install ntpdate
ntpdate ntp.ntsc.ac.cn
(查看时间)
hwclock
设置时区后再次执行date查看时间日期最后是否变成了CST。最后为了使得系统日志的时间戳也立即生效,需要执行一下命令重启rsyslog:
sudo systemctl restart rsyslog
关闭swap
vim /etc/fstab
注释掉swap.img none swap sw 0 0这行
docker 安装
apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -yapt updatecurl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"apt-get install docker-ce docker-ce-cli containerd.io
安装 cri-dockerd因为k8s在1.24移除了Dockershim,所以需要一个支持cri的插件
查看系统下载对应的版本
lsb_release -a
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.4/cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.debdpkg -i cri-dockerd_0.3.4.3-0.ubuntu-focal_amd64.deb# 重载系统守护进程systemctl daemon-reload# 设置cri-dockerd自启动
systemctl enable cri-docker.socket cri-docker# 启动cri-dockerd
start cri-docker.socket cri-docker
查看cri-docker状态
systemctl status cri-docker.socket
安装 kubectl
#用以下命令下载最新发行版curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"#下载验证该可执行文件
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"基于校验和文件,验证 kubectl 的可执行文件:
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check验证通过时,输出为:
kubectl: OK安装 kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl验证安装是否成功
kubectl version --client
安装 kubeadm
····
apt-get update
apt-get install -y apt-transport-https ca-certificates curl
mkdir -p /etc/apt/keyrings/
chmod -R 755 /etc/apt/keyrings
curl -fsSL https://dl.k8s.io/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
echo “deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee /etc/apt/sources.list.d/kubernetes.list
apt-get install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl
#设置kubelet自启动
sudo systemctl enable --now kubelet
····
安装runc
#安装runc
sudo install -m 755 runc.amd64 /usr/local/bin/runc
#检查是否安装成功
runc -v
初始化master(只需要在master执行)
kubeadm init --node-name=master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.192.137 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12--node-name=master 节点名称就是当前主机的hostname
--image-repository=registry.aliyuncs.com/google_containers 设置为阿里镜像
--cri-socket=unix:///var/run/cri-dockerd.sock # 这是指定容器运行时
--apiserver-advertise-address=192.168.56.50 # 为API server设置广播地址,这里选择本机的ipv4地址,这里不希望API SERVER设置在其他node上的话就不要改为其他地址。
--pod-network-cidr=10.244.0.0/16 # 指明 pod 网络可以使用的 IP 地址段,暂时不清楚的可以先不管就用这个值。
--service-cidr=10.96.0.0/12 # 为服务的虚拟 IP 地址另外指定 IP 地址段,暂时不清楚的可以先不管就用这个值。
安装成功会显示
按提示执行
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/configexport KUBECONFIG=/etc/kubernetes/admin.confexport KUBECONFIG=/etc/kubernetes/admin.conf >> /etc/profilesource /etc/profile
安装配置cni网络插件flannel
wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.ymlkubectl apply -f kube-flannel.yml
让Node节点加入Master,下面的命令在master安装成功后会有
kubeadm join 192.168.192.137:6443 --token ut7ln6.s8crplgxko21wqyv --discovery-token-ca-cert-hash sha256:495ffbf5e18082d0d88e0c0abb3e68d0a841eef257d8b3a844763efc951e4704
加入后执行
echo "export KUBECONFIG=/etc/kubernetes/kubelet.conf" >> /etc/profilesource /etc/profile
在三台主机上都可以查询节点状态
kubectl get nodes
查看k8s状态命令
systemctl status kubelet
安装k8s界面(在master执行)
Dashboard
先下载文件,需要将ClusterIP改成NodePort才能非本地访问
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
修改recommended.yaml
vim recommended.yaml
在下面位置添加
type: NodePort
查看 Dashboard 暴露外网端口
创建账户,生成token
vim dashboard-account.yaml
写入下面内容
apiVersion: v1
kind: ServiceAccount
metadata:name: admin-usernamespace: kubernetes-dashboard---apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: admin-user
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: cluster-admin
subjects:
- kind: ServiceAccountname: admin-usernamespace: kubernetes-dashboard
执行文件
kubectl apply -y dashboard-account.yaml
获取账户token
kubectl -n kubernetes-dashboard create token admin-user
输入token登录查看
https://192.168.192.137:31711
参考文章
http://www.uml.org.cn/yunjisuan/2022051844.asp
https://blog.csdn.net/weixin_39246554/article/details/128123553