K8s环境搭建
CentOS7下安装K8S 1.23.17 版本。需要提前安装 docker
一、环境准备
| 主机名 |
IP |
用途 |
k8s版本 |
docker版本 |
| harbor-server |
192.168.10.250 |
www、镜像仓库 |
|
|
| k8s231.bravexist.cn |
192.168.10.231 |
controller-plane (Master) |
v1.23.17 |
20.10.24 |
| k8s232.bravexist.cn |
192.168.10.232 |
Worker Node |
v1.23.17 |
20.10.24 |
| k8s233.bravexist.cn |
192.168.10.233 |
Worker Node |
v1.23.17 |
20.10.24 |
k8s231、k8s232、k8s233都需要操作
- 关闭swap分区
临时关闭
1
| swapoff -a && sysctl -w vm.swappiness=0
|
基于配置文件的关闭
1
| sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
|
- 确保各个节点MAC地址或product_uuid唯一
1
| ip address show ens33 |grep ether |awk '{print $2}'
|
1
| cat /sys/class/dmi/id/product_uuid
|
- 检查网络节点是否互通
- 允许iptable检查桥接流量
1 2 3 4 5 6 7 8 9
| cat <<EOF | tee /etc/modules-load.d/k8s.conf br_netfilter EOF
cat <<EOF | tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF sysctl --system
|
- 检查端口是否被占用
新机器没有服务。
- 检查docker的环境
- docker
docker compose(不需要)
20.10.24版本没有自带compose
- docker配置的优化
1 2 3 4 5 6
| mkdir -pv /etc/docker && cat <<EOF | tee /etc/docker/daemon.json { "registry-mirrors": ["https://hub.bravexist.cn"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF
|
- 将harbor服务器的客户端证书拷贝到k8s集群
1
| mkdir -pv /etc/docker/certs.d/harbor.bravexist.cn
|
注意 :接下来是在harbor机器上操作
1 2 3
| scp /opt/softwares/harbor/certs/client/* 192.168.10.231:/etc/docker/certs.d/harbor.bravexist.cn scp /opt/softwares/harbor/certs/client/* 192.168.10.232:/etc/docker/certs.d/harbor.bravexist.cn scp /opt/softwares/harbor/certs/client/* 192.168.10.233:/etc/docker/certs.d/harbor.bravexist.cn
|
- 开机自启
1 2 3
| systemctl daemon-reload systemctl enable --now docker systemctl status docker
|
- 关闭防火墙
1
| systemctl disable --now firewalld
|
- selinux关闭
1 2
| sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config grep ^SELINUX= /etc/selinux/config
|
- 配置host解析
1 2 3 4 5 6 7
| cat >> /etc/hosts <<'EOF' 192.168.10.231 k8s231.bravexist.cn 192.168.10.232 k8s232.bravexist.cn 192.168.10.233 k8s233.bravexist.cn 192.168.10.250 harbor.bravexist.cn EOF cat /etc/hosts
|
- 验证是否能够登录harbor仓库
1
| docker login -u admin -p 'Harbor12345' harbor.bravexist.cn
|
二、安装
所有节点安装kubeadm,kubelet,kubectl
- 设置仓库
1 2 3 4 5 6 7 8
| cat > /etc/yum.repos.d/kubernetes.repo <<EOF [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF
|
- 查看kubeadm的版本
1
| yum -y list kubeadm --showduplicates
|
- 安装kubeadm,kubelet,kubectl软件包
1 2
| KUBE_VERSION=1.23.17-0 yum -y install kubeadm-${KUBE_VERSION} kubelet-${KUBE_VERSION} kubectl-${KUBE_VERSION}
|
- 验证启动,会启动失败
1 2
| systemctl enable --now kubelet systemctl status kubelet
|
- 打包安装包(用于在离线环境)
1 2 3
| cd ~ mkdir k8s-rpm-1_23_17-0 find /var/cache/yum -name "*.rpm" |xargs mv -t k8s-rpm-1_23_17-0/
|
1
| tar -zcvf k8s-rpm-1_23_17-0.tar.gz k8s-rpm-1_23_17-0
|
三、初始化
先导入镜像
master节点执行
1 2 3 4 5
| kubeadm init --kubernetes-version=v1.23.17 \ --image-repository registry.aliyuncs.com/google_containers \ --pod-network-cidr=10.100.0.0/16 \ --service-cidr=10.200.0.0/16 \ --service-dns-domain=bravexist.cn
|
--image-repository 使用阿里云镜像拉取镜像
1 2 3
| mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
1 2
| kubectl get componentstatuses kubectl get cs
|
worker节点执行(需对应上述的初始化后的提示)
1 2
| kubeadm join 192.168.10.231:6443 --token eqlig8.i19f9ug40bv3mpmt \ --discovery-token-ca-cert-hash sha256:7a1e05d52def714e2e96d58f91507dd21e2b3c33111745af6f769eb157d3d30b
|
意外没跑起来的话,需要清理环境,重新启动或加入
1 2 3
| rm -rf /var/lib/kubelet/* rm -rf /etc/kubernetes rm -rf /var/lib/etcd
|
导出controller-plane镜像
1
| mkdir controller-control
|
1 2 3
| docker images --format '{{.Repository}} {{.Tag}}' | \ awk '{f=$1"_"$2".tar";gsub("/","_",f);print $1":"$2, f}' | \ xargs -n2 sh -c 'docker save "$0" -o "$1"'
|
快速导入镜像的命令
1
| for i in *.tar;do docker load -i $i ;done
|
添加kubectl的自动补全功能
1
| echo "source <(kubectl completion bash)" >> ~/.bashrc && source ~/.bashrc
|
四、安装网络插件
安装网络插件,修改网段为pod的网段 10.100.0.0/16
or
1 2
| wget https://g.bravexist.cn/https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
|
1
| kubectl apply -f kube-flannel.yml
|
验证网络插件安装成功
1
| kubectl get pods -A -o wide| grep kube-flannel
|
五、验证pod 间互通
- 创建资源的配置文件
1
| vim test-network-linux-ds.yaml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| kind: DaemonSet apiVersion: apps/v1 metadata: name: linux-ds spec: selector: matchLabels: school: tyust class: bitdata template: metadata: labels: school: tyust class: bitdata spec: containers: - image: alpine:3.23.2 stdin: true name: mylinux
|
创建资源
1
| kubectl apply -f test-network-linux-ds.yaml
|
查看资源
1
| kubectl get pods -o wide
|
1 2 3 4 5
| [root@k8s231.bravexist.cn ~]# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES linux-ds-68ck2 1/1 Running 0 4s 10.100.2.4 k8s233.bravexist.cn <none> <none> linux-ds-c5plq 1/1 Running 0 4s 10.100.1.2 k8s232.bravexist.cn <none> <none> [root@k8s231.bravexist.cn ~]#
|
测试跨节点Pod之间的通信
kubectl exec linux-ds-c5plq -- ping -c 3 10.100.2.4
删除ds资源
1
| kubectl delete -f test-network-linux-ds.yaml
|