Skip to content

CKA自学笔记1:单节点虚拟机安装Kubernetes

摘要

在本地Windows环境中,通过VMWare安装Ubuntu虚拟机。在Ubuntu虚拟机中安装基于Docker的Kubernetes系统。在该虚拟机中同时配置主节点Master和工作节点Worker。

本地虚拟机设置

VMWare虚拟机设置。

  • VMnet1: host-only模式, 网络subnet: 192.168.150.0/24
  • VMnet8: NAT模式, 网络subnet: 11.0.1.0/24

通过VMWare创建客户机。

  • 内存:4 GB
  • CPU:2 CPUs with 2 Cores
  • 操作系统:Ubuntu Server 22.04
  • 网络:NAT

Kubernetes运行在Docker上。

Ubuntu预配置

创建用户 vagrant

sudo adduser vagrant
sudo usermod -aG adm,sudo,syslog,cdrom,dip,plugdev,lxd vagrant
sudo passwd vagrant

设置用户 root的密码。

sudo passwd root

更新客户机的主机名,这里是 ubusvr

sudo hostnamectl set-hostname ubusvr
sudo hostnamectl set-hostname ubusvr --pretty

验证主机名是否已成功更新为 ubusvr

cat /etc/machine-info
cat /etc/hostname

验证主机IP地址127.0.1.1 已经配置给当前虚拟机ubusvr

cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 ubusrv

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

设置客户机为固定IP地址,这里是11.0.1.136

sudo vi 00-installer-config.yaml
network:
  ethernets:
    ens33:
      dhcp4: false
      addresses:
      - 11.0.1.136/24
      nameservers:
        addresses:
        - 11.0.1.2
      routes:
      - to: default
        via: 11.0.1.2
  version: 2
sudo netplan apply

禁用交换分区swap。

sudo swapoff -a
sudo ufw disable
sudo ufw status verbose

注释掉文件/etc/fstab的最后一行,即禁用交换分区。需要重启客户机使之生效。

/dev/disk/by-uuid/df370d2a-83e5-4895-8c7f-633f2545e3fe / ext4 defaults 0 1
# /swap.img     none    swap    sw      0       0

设置客户机时区。

sudo ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
sudo echo 'LANG="en_US.UTF-8"' >> /etc/profile
source /etc/profile

执行命令 ll /etc/localtime验证时区是否已正确设置并生效。

lrwxrwxrwx 1 root root 33 Jul 15 22:00 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai

客户机内核设置。

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes-cri.conf
net.bridge.bridge-nf-call-iptables  = 1
net.ipv4.ip_forward                 = 1
net.bridge.bridge-nf-call-ip6tables = 1
EOF
sudo sysctl --system

安装Docker

参考帮助

sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl status docker.service

sudo systemctl status containerd.service
sudo groupadd docker
sudo usermod -aG docker $USER

设置Containerd。

containerd config default | sudo tee /etc/containerd/config.toml
sudo vi /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl status containerd

安装Kubernetes

安装kubeadm

sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl

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

cat << EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF

sudo apt-get update
sudo apt-get install ebtables
sudo apt-get install libxtables12
sudo apt-get upgrade iptables
apt policy kubeadm
sudo apt-get -y install kubelet=1.23.8-00 kubeadm=1.23.8-00 kubectl=1.23.8-00 --allow-downgrades

配置主节点(Master)。

sudo kubeadm config print init-defaults

安装预演Dry run。

sudo kubeadm init --dry-run --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.8

安装。

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers --kubernetes-version=v1.23.8
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

安装Flannel。如果需要考虑网络策略,则安装Calico。参照阿里云ECS中Install Calico or Flannel部分。

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

配置工作节点(Worker Node)。

kubeadm join <your master node eth0 ip>:6443 --token <token generated by kubeadm init> --discovery-token-ca-cert-hash <hash key generated by kubeadm init>
kubeadm join 11.0.1.136:6443 --token 6zqh1u.8b4afzc2ov4e7iuj \
  --discovery-token-ca-cert-hash sha256:815fdb9dd9e3ae0af07ffaf6c216964388098b150ef01ee3ae900c261a429d24

在所有节点上配置bash自动补全功能。

sudo apt install -y bash-completion
source /usr/share/bash-completion/bash_completion
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc

在所有节点上定义别名(alias)。

echo 'alias k=kubectl' >>~/.bashrc
echo 'complete -o default -F __start_kubectl k' >>~/.bashrc

查看当前集群状态。

kubectl cluster-info
kubectl get nodes -owide
kubectl get pod -A

安装Helm

安装Helm客户端。

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh

输出结果:

Downloading https://get.helm.sh/helm-v3.9.0-linux-amd64.tar.gz
Verifying checksum... Done.
Preparing to install helm into /usr/local/bin
helm installed into /usr/local/bin/helm

重置集群

注意:下面的操作会重置当前集群(删除集群)。

删除集群中所有节点。

kubeadm reset

清除iptables中已定义的规则。

iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X

清除IPVS中定义的规则(如果使用IPVS)。

ipvsadm --clear