准备工作

机器配置

准备3台机器,一台master节点,2台node节点。

192.168.110.103  master 
192.168.110.180  node1 
192.168.110.128  node2 

分别给每台机设置别名

hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2

将别名分别写入各个节点的hosts文件中,编译访问

cat >> /etc/hosts << EOF
192.168.110.103 k8s-master
192.168.110.180  k8s-node1
192.168.110.128 k8s-node2
EOF

配置yum源与安装软件

更新centos的yum源和安装必要软件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install lrzsz vim net-tools

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

关闭selinux.

sed -i 's/enforcing/disabled/' /etc/selinux/config

安装ntpdate

yum install ntpdate -y

集群所有服务器实现时间同步

ntpdate -u ntp1.aliyun.com

关闭swap

sed -ri 's/.*swap.*/#&/' /etc/fstab

配置网络

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
net.ipv4.tcp_tw_recycle = 0
EOF
sysctl -p
modprobe br_netfilter
lsmod | grep br_netfilter

查看并更新内核

uname -a
yum update

配置ipvs功能

安装ipset和ipvsadm

yum install ipset ipvsadmin -y

如果提示No package ipvsadmin available.需要使用

yum install ipvsadm

创建运行脚本

cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod +x /etc/sysconfig/modules/ipvs.modules

执行脚本文件

/bin/bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

重启

reboot

安装docker

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl enable docker && systemctl start docker

配置国内源

cat > /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": ["https://docker.hpcloud.cloud","https://docker.m.daocloud.io","https://docker.unsee.tech","https://docker.1panel.live","http://mirrors.ustc.edu.cn","https://docker.chenby.cn","http://mirror.azure.cn","https://dockerpull.org","https://dockerhub.icu","https://hub.rat.dev"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  }
}
EOF

重启

systemctl restart docker

安装 cri-dockerd

通过 wget 命令获取 cri-dockerd软件

wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.12/cri-dockerd-0.3.12-3.el7.x86_64.rpm

如果服务器无法下载离线上传

通过 rpm 命令执行安装包

rpm -ivh cri-dockerd-0.3.12-3.el7.x86_64.rpm

修改cri-docker.service 配置文件

vim /usr/lib/systemd/system/cri-docker.service
修改对应的配置项
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

重启

systemctl daemon-reload
systemctl enable cri-docker && systemctl start cri-docker
systemctl enable cri-docker.socket && systemctl start cri-docker.socket
systemctl status cri-docker.service

添加国内yum源

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
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装 kubeadm、kubelet 和 kubectl

yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl start kubelet
systemctl enable kubelet

Master 节点初始化 K8s

注意需要更改ip为自己服务器ip 192.168.110.103

kubeadm init \
  --apiserver-advertise-address=192.168.110.103 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16 \
  --cri-socket=unix:///var/run/cri-dockerd.sock \
  --ignore-preflight-errors=all

执行后会出现

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

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.110.103:6443 --token x9jc0s.p06jhxfu7iub6wx7 --discovery-token-ca-cert-hash sha256:c9537946eef4bc5bf9012fa3b280f92c840969429c1b19a602b98d5ed623d294 --cri-socket unix:///var/run/cri-dockerd.sock 

显示成功之后需要master执行以下命令

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

kubernetes强化tab

echo 'source  <(kubectl  completion  bash)' >> ~/.bashrc

节点加入master集群

kubeadm join 10.0.0.70:6443 --token x3jlhw.ymjilbj6aiqyjelh --discovery-token-ca-cert-hash sha256:e0222e1db79bd45841dbf390f9060d208b03bfa1c88c76067e2de6d5322bc845 --cri-socket=unix:///var/run/cri-dockerd.sock

安装网络插件 (master执行)

wget https://docs.projectcalico.org/manifests/calico.yaml
sed -i 's#docker.io/##g' calico.yaml

修改caloco.yaml

搜索CALICO_IPV4POOL_CIDR 将其放开

 - name: CALICO_IPV4POOL_CIDR
   value: "10.244.0.0/16"

运行calico

kubectl apply -f calico.yaml
kubectl apply -f calico.yaml --request-timeout=300s

删除

kubectl delete -f calico.yaml

重启

systemctl restart kubelet

验证

创建一个Deployment

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod.svc

访问

本地访问
在这里插入图片描述

当虚拟机关闭后,重新启动

systemctl restart kubelet

所有的kubectl 都需要在master节点执行,是否可以在其他node节点运行

  1. master节点中/etc/kubernetes/admin.conf拷贝到需要运行的服务器的 /etc/kubernetes目录中
scp /etc/kubernetes/admin.conf root@k8s-node1 :/etc/kubernetes
  1. 在对应的服务器上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
  1. 环境变量生效
source ~/.bash_profile
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐