- 主机配置
配置项目 配置参数 OS Ubuntu 20.04.4 LTS CPU 2核 RAM 2G Storage 40G - 网络配置
主机名 ipv4 地址 k8s-master 192.168.64.8 k8s-node01 192.168.64.9 k8s-node02 192.168.64.10 - 软件版本
软件名 版本号 Docker CE v20.10.5 Kubernetes v1.23.6 Dashboard v2.5.1 ingress-nginx v1.1.0 metrics-server v0.5.2 - 常用网址
- k8s 官方 Github 仓库:查阅各种软件版本对应关系
- 阿里云容器镜像服务:提供各种软件的国内镜像
文章目录
一、环境准备
- 安装 Multipass
下载地址 - 创建虚拟机
multipass launch --name k8s-master --cpus 2 --mem 2048M --disk 40G multipass launch --name k8s-node01 --cpus 2 --mem 2048M --disk 40G multipass launch --name k8s-node02 --cpus 2 --mem 2048M --disk 40G
- 环境初始化
以 k8s-master为例,k8s-node01与k8s-node02操作相同,不做赘述。- 进入虚拟机
multipass shell k8s-master
- 设置root密码
sudo passwd
- 主机名解析
注释如下两行:sudo vim /etc/cloud/cloud.cfg
加入解析:# - update_hostname # - update_etc_hosts
sudo vim /etc/hosts
此时各个虚拟机之间应该可以相互ping通:192.168.64.8 k8s-master 192.168.64.9 k8s-node01 192.168.64.10 k8s-node02
- 同步时区
sudo timedatectl set-timezone Asia/Shanghai sudo systemctl restart rsyslog
- 禁用防火墙
sudo ufw disable
- 禁止 swap 分区
sudo swapoff -a sudo sed -i 's/.*swap.*/#&/' /etc/fstab
- 禁止 selinux
sudo apt install -y selinux-utils setenforce 0
- 允许ssh密码登录权限
sudo vim /etc/ssh/sshd_config
PasswordAuthentication yes
sudo service sshd restart
- 重启虚拟机
multipass restart k8s-master
- 进入虚拟机
二、安装Docker
以 k8s-master为例,k8s-node01与k8s-node02操作相同,不做赘述。
-
安装依赖项
sudo apt-get update && apt-get install -y curl telnet wget man apt-transport-https ca-certificates software-properties-common vim
-
安装Docker
- 下载相关安装包
- 将安装包传送到虚拟机中
multipass transfer docker-ce-cli_20.10.5_3-0_ubuntu-focal_arm64.deb k8s-master:/home/ubuntu/ multipass transfer containerd.io_1.4.6-1_arm64.deb k8s-master:/home/ubuntu/ multipass transfer docker-ce_20.10.5_3-0_ubuntu-focal_arm64.deb k8s-master:/home/ubuntu/
- 安装deb文件
sudo dpkg -i docker-ce-cli_20.10.5_3-0_ubuntu-focal_arm64.deb sudo dpkg -i containerd.io_1.4.6-1_arm64.deb sudo dpkg -i docker-ce_20.10.5_3-0_ubuntu-focal_arm64.deb
-
配置Docker
- 将当前用户添加到 docker 的用户组中
sudo groupadd docker sudo usermod -aG docker $USER
- 将 docker 的 cgroup driver 改为 systemd,并通过阿里云获得加速通道:
sudo vim /etc/docker/daemon.json
{ "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://w6ek54j1.mirror.aliyuncs.com"] }
sudo systemctl restart docker
- 设置 docker 开机自启动
sudo systemctl enable docker
- 将当前用户添加到 docker 的用户组中
三、安装Kubernetes
以 k8s-master为例,k8s-node01与k8s-node02操作相同,不做赘述。
- 添加Kubernetes国内源
- 创建配置文件
sudo touch /etc/apt/sources.list.d/kubernetes.list
- 添加权限
sudo chmod 666 /etc/apt/sources.list.d/kubernetes.list
- 添加内容
sudo vim /etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
- 添加认证 key
gpg --keyserver keyserver.ubuntu.com --recv-keys 307EA071 gpg --keyserver keyserver.ubuntu.com --recv-keys 836F4BEB gpg --export --armor 307EA071 | sudo apt-key add - gpg --export --armor 836F4BEB | sudo apt-key add -
- 更新操作系统源
sudo apt update
- 创建配置文件
- 网络配置
- 创建配置文件
sudo touch /etc/sysctl.d/k8s.conf
- 添加权限
sudo chmod 666 /etc/sysctl.d/k8s.conf
- 添加内容
sudo vim /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 vm.swappiness = 0
- 执行命令使修改生效
sudo modprobe br_netfilter sudo sysctl -p /etc/sysctl.d/k8s.conf
- 创建配置文件
- 安装 Kubernetes
- 安装 Kubernetes 相关组件
su sudo apt update && apt-get install -y kubelet=1.23.6-00 kubeadm=1.23.6-00 kubectl=1.23.6-00
- 设置为开机自启动
sudo systemctl enable kubelet && systemctl start kubelet
- 重启虚拟机
multipass restart k8s-master
- 安装 Kubernetes 相关组件
四、Master 节点配置
仅在 k8s-master 节点运行。
-
创建工作目录
sudo mkdir /home/ubuntu/working cd working/
-
生成配置文件
su kubeadm config print init-defaults --kubeconfig ClusterConfiguration > kubeadm.conf
-
修改配置文件
vim kubeadm.conf
# 修改镜像地址 imageRepository: registry.aliyuncs.com/google_containers # 修改版本信息 kubernetesVersion: v1.23.6 # 修改 localAPIEndpoint 中的 advertiseAddress 为 master 节点 IP localAPIEndpoint: advertiseAddress: 192.168.73.200 bindPort: 6443 # 配置子网网络 # 10.244.0.0/16 和 10.96.0.0/12 分别是 kubernetes 内部 pods 和 services 的子网网络 networking: dnsDomain: cluster.local podSubnet: 10.244.0.0/16 serviceSubnet: 10.96.0.0/12
-
拉取 kubernetes 所关联的镜像
kubeadm config images pull --config ./kubeadm.conf
-
初始化 kubernetes 环境
sudo kubeadm init --config ./kubeadm.conf
-
创建系统服务
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
记录下如下信息,后面node节点的加入需要用到:
-
设置为开机自启动
sudo systemctl enable kubelet && systemctl start kubelet
五、Flannel 网络部署
仅在 k8s-master 节点运行。
- 拉取配置文件
cd $HOME/working sudo wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 编辑配置文件
找到 net-conf.json 查看 Network 是否与之前的 kubeadm.conf 中的 podsubnet 的地址一致。net-conf.json: | { "Network": "10.244.0.0/16", Backend": { "Type": "vxlan" } }
- 应用当前 flannel 配置文件完成组网
过一会儿后查看节点状态:kubectl apply -f kube-flannel.yml
六、Node 节点配置
仅在 k8s-node01与 k8s-node02节点运行。
- 创建工作目录
sudo mkdir /home/ubuntu/working cd working/
- 设置kubelet 为开机自启动
sudo systemctl enable kubelet && systemctl start kubelet
- 配置kube基础环境
- 传输配置文件
登录 master 终端,将 master 机器的 admin.conf 传到 node01 和 node02:sudo scp /etc/kubernetes/admin.conf ubuntu@192.168.64.9:/home/ubuntu/working sudo scp /etc/kubernetes/admin.conf ubuntu@192.168.64.10:/home/ubuntu/working
- 加入k8s节点
mkdir -p $HOME/.kube sudo cp -i $HOME/working/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config su kubeadm join 192.168.64.8:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:43b03675267dea481adce0de4e743709939b1a5812af8d1a26913918b622a5c2
- 传输配置文件
- 应用 flannel 网络
- 传输配置文件
登录 master 终端,将 master 机器的 kube-flannel.yml 传到 node01 和 node02:sudo scp $HOME/working/kube-flannel.yml ubuntu@192.168.64.9:/home/ubuntu/working sudo scp $HOME/working/kube-flannel.ymlubuntu@192.168.64.10:/home/ubuntu/working
- 应用 flannel 网络
kubectl apply -f kube-flannel.yml
- 传输配置文件
七、环境测试
部署nginx 测试
# 部署nginx
sudo kubectl create deployment nginx --image=nginx
# 暴露端口
sudo kubectl expose deployment nginx --port=80 --type=NodePort
# 查看状态
sudo kubectl get pod
sudo kubectl get svc
八、安装Dashboard
-
下载yaml
wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml
-
修改配置
修改 kind: Service 中的字段,将 service type 改为 NodePort,然后指定 nodeport 端口kind: Service apiVersion: v1 metadata: labels: k8s-app: kubernetes-dashboard name: kubernetes-dashboard namespace: kubernetes-dashboard spec: type: NodePort ports: - port: 443 targetPort: 8443 nodePort: 32323 selector: k8s-app: kubernetes-dashboard
-
部署 yaml 文件
sudo kubectl apply -f recommended.yaml
-
创建访问账户,获取token
创建账号sudo kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
授权
sudo kubectl create clusterrolebinding dashboard-admin-rb --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
获取账号token
sudo kubectl get secrets -n kubernetes-dashboard | grep dashboard-admin
sudo kubectl describe secrets dashboard-admin-token-6kjfp -n kubernetes-dashboard
-
通过浏览器访问
九、安装ingress-nginx
-
拉取配置文件
cd $HOME/working sudo wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/baremetal/deploy.yaml
-
修改配置文件
设置镜像地址为阿里云# 修改 k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660 registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.1.1 # 修改k8s.gcr.io/ingress-nginx/controller:v1.1.1@sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller:v1.1.1
-
安装metrics-server
sudo kubectl apply -f ./deploy.yaml
-
查看ingress-nginx
sudo kubectl get pod -n ingress-nginx
-
查看资源使用情况
sudo kubectl get svc -n ingress-nginx
十、安装metrics-server
-
拉取配置文件
cd $HOME/working sudo wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.5.2/components.yaml
-
修改配置文件
设置镜像地址为阿里云,并添加 “- --kubelet-insecure-tls”
-
安装metrics-server
sudo kubectl apply -f ./components.yaml
-
查看pod运行情况
sudo kubectl top node
-
查看资源使用情况
sudo kubectl top pod -n kube-system