1 部署1master 3node四节点kubernetes集群。
1.1 环境准备
环境和软件版本
OS : ubuntu 20.04
container runtime: docker CE 20.10.22
kubernetes 1.24.17
CRI:cri-dockerd v0.3.3
修改hosts和主机名
192.168.1.180 k8s-master01.luohw.com k8s-master01 kubeapi.luohw.com
192.168.1.181 k8s-node01.luohw.com k8s-node01
192.168.1.183 k8s-node02.luohw.com k8s-node02
192.168.1.185 k8s-node03.luohw.com k8s-node03
关闭swap
注意:不修改主机名,后面部署网络插件后,节点pod通信会有问题
2.2 安装docker
所有节点使用阿里源安装docker
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
配置docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://2abfrd78.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "200m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
systemctl restart docker
1.3 部署cri-docker
所有节点安装cri-docker
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.3/cri-dockerd_0.3.3.3-0.ubuntu-focal_amd64.deb
dpkg -i cri-dockerd_0.3.3.3-0.ubuntu-focal_amd64.deb
修改cri-docker service文件中pause镜像为阿里云镜像
vi /lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7 --cni-bin-dir=/opt/cni/bin --cni-cache-dir=/var/lib/cni/cache --cni-conf-dir=/etc/cni/net.
1.4 安装kubeadm等
所有节点安装配置
apt-get update && apt-get install -y apt-transport-https
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
apt install kubelet=1.24.17-00 kubeadm=1.24.17-00 kubelet=1.24.17-00
配置kubelet
mkdir /etc/sysconfig
cat > /etc/sysconfig/kubelet <<EOF
KUBELET_KUBEADM_ARGS="--container-runtime=remote --container-runtime-endpoint=/run/cri-dockerd.sock"
EOF
1.5 初始化master节点
查看所需要的镜像
kubeadm config images list --kubernetes-version v1.24.17
registry.k8s.io/kube-apiserver:v1.24.17
registry.k8s.io/kube-controller-manager:v1.24.17
registry.k8s.io/kube-scheduler:v1.24.17
registry.k8s.io/kube-proxy:v1.24.17
registry.k8s.io/pause:3.6
registry.k8s.io/etcd:3.5.6-0
registry.k8s.io/coredns/coredns:v1.8.6
拉取镜像,指定阿里云镜像仓库
kubeadm config images pull --kubernetes-version v1.24.17 --cri-socket unix:///run/cri-dockerd.sock --image-repository=registry.aliyuncs.com/google_containers
初始化集群
kubeadm init \
--control-plane-endpoint="kubeapi.luohw.com" \
--kubernetes-version=v1.24.17 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--token-ttl=0 \
--cri-socket unix:///run/cri-dockerd.sock \
--upload-certs
按照就提示拷贝config文件
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
1.6 部署网络插件flannel
https://github.com/flannel-io/flannel/
每个节点下载flanneld-amd64最新版放到/opt/bin 把-amd64去掉,并添加执行权限
https://github.com/flannel-io/flannel/releases/download/v0.22.2/flanneld-amd64
mkdir /opt/bin/
root@k8s-master01:~# cd /opt/bin/
root@k8s-master01:/opt/bin# ls
flanneld-amd64
root@k8s-master01:/opt/bin# mv flanneld-amd64 flannel
chmod +x /opt/bin/flanneld
scp /opt/bin/flanneld 192.168.1.183:/opt/bin/
应用flannel,容器运行成功后,节点变为ready状态
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
1.7 添加node节点
kubeadm join kubeapi.luohw.com:6443 --token zeto9q.3f1tfb4v6hj8378w --discovery-token-ca-cert-hash sha256:7f635cd82075f0de5eb62280c1dcf36c436fa7f871fa186d398ee9bf81fd2f11 --cri-socket unix:///run/cri-dockerd.sock
添加node节点成功后查看所有节点都是ready状态
2 使用NFS做pod持久化存储。
2.1 部署nfs服务
apt install nfs-kernel-server -y
mkdir /data/test01 -p
vi /etc/exports
/data/test01 192.168.1.0/24(rw,no_subtree_check,no_root_squash)
rw 表示挂载为可读写权限,客户端可以读取和写入到该目录。
no_subtree_check 表示不进行子目录检查,这允许客户端可以访问目录下的所有子目录而不进行额外的检查。
no_root_squash 表示以 root 身份运行的进程在客户端上享有与服务器上相同的权限,而不是被映射到匿名用户。
k8s node 节点验证nfs 列表
root@k8s-node01:~# showmount -e 192.168.1.180
Export list for 192.168.1.180:
/data/test01 192.168.1.0/24
2.2 部署pod使用nfs
编写yaml文件
root@k8s-master01:~/yaml# vi nginx-nfs-test.yaml
cat nginx-nfs-test.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-nfs-test
spec:
containers:
- name: nginx2
image: nginx:1.22
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-test
mountPath: /data2
volumes:
- name: nfs-test
nfs:
server: 192.168.1.180
path: /data/test01
应用yaml文件
root@k8s-master01:~/yaml# kubectl apply -f nginx-nfs-test.yaml
pod/nginx-nfs-test created
查看pod运行正常
kubectl get pods
nginx-nfs-test 1/1 Running 0 6m17s
进入容器看到挂载nfs成功
root@k8s-master01:~/yaml# kubectl exec -it nginx-nfs-test -- bash
root@nginx-nfs-test:/# df -h
Filesystem Size Used Avail Use% Mounted on
overlay 120G 11G 110G 9% /
tmpfs 64M 0 64M 0% /dev
tmpfs 971M 0 971M 0% /sys/fs/cgroup
192.168.1.180:/data/test01 120G 11G 110G 9% /data2
/dev/sda2 120G 11G 110G 9% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 1.8G 12K 1.8G 1% /run/secrets/kubernetes.io/serviceaccount
tmpfs 971M 0 971M 0% /proc/acpi
tmpfs 971M 0 971M 0% /proc/scsi
在pod挂载点写入数据,nfs服务器可以查看到,nfs服务器写入数据,pod也能查看到
root@nginx-nfs-test:/data2# echo 222 > index.html