1、安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
master01 192.168.0.66 zwinfo node01 192.168.0.67 zwinfo node02 192.168.0.68 zwinfo
名称 版本 docker-ce 20.10.10 docker-ce-cli 20.10.10 containerd.io 1.4.12 kubeadm 1.20.9 kubelet 1.20.9 kubectl 1.20.9 kubernetes-cni 0.8.7
192.168.0.99
192.168.0.66
所有主机都执行
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org # 导入elrepo的签名
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-5.el7.elrepo.noarch.rpm # 升级elrepo源
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --enablerepo=elrepo-kernel install kernel-lt kernel-lt-devel -y
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
或者
rpm -qa kernel
grub2-set-default 0
reboot
所有主机都执行
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config # 永久关闭selinux(重启后生效)
setenforce 0 # 临时关闭selinux(不需要重启,立即生效)
# 关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久关闭swap(重启后生效)
swapoff -a # 临时关闭swap(不需要重启,立即生效)
# 设置主机名
hostnamectl --static set-hostname master01
#hostnamectl --static set-hostname node01
#hostnamectl --static set-hostname node02
# 在master添加hosts
cat >> /etc/hosts << EOF
192.168.0.66 master01
192.168.0.67 node01
192.168.0.68 node02
EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/kubernetes.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system # 立即生效
# 时间同步
yum install ntpdate -y
ntpdate -u pool.ntp.org
# 添加定时
crontab -l
*/20 * * * * /sbin/ntpdate -u pool.ntp.org > /dev/null 2>&1
所有主机都执行
#安装wget
yum install wget -y
#下载docker-ce源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
#查看可以安装的docker版本
yum list docker-ce --showduplicates | sort -r
#安装docker
yum install -y docker-ce-20.10.10 docker-ce-cli-20.10.10 containerd.io-1.4.12
#查看docker版本
docker -v
#创建docker配置目录
mkdir /etc/docker
#配置docker源
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://anson.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"insecure-registries": ["harbor.anson.cn"]
}
EOF
#重载
systemctl daemon-reload
#设置开机启动
systemctl enable docker
#启动docker服务
systemctl start docker
所有主机上执行
#添加阿里yum源
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=http://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
yum -y install kubeadm-1.23.4 kubelet-1.23.4 kubectl-1.23.4
#设置开机启动
systemctl enable kubelet
#启动kubelet服务
systemctl start kubelet
只在master上执行 (失败重置命令 kubeadm reset )
kubeadm config print init-defaults > kubeadm-config.yaml
vi kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta2
bootstrapTokens:
- groups:
- system:bootstrappers:kubeadm:default-node-token
token: 4jvhpu.xxxxxx# 随便设置个token,或者删除bootstrapTokens
ttl: 24h0m0s
usages:
- signing
- authentication
kind: InitConfiguration
localAPIEndpoint:
advertiseAddress: 192.168.0.66 # 修改为master01的ip地址
bindPort: 6443
nodeRegistration:
criSocket: /var/run/dockershim.sock
name: master01 # 修改为master01的节点名称,host保持一致
taints:
- effect: NoSchedule
key: node-role.kubernetes.io/master
---
apiServer:
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta2
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns:
type: CoreDNS
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.aliyuncs.com/google_containers # 修改为阿里云镜像仓库
kind: ClusterConfiguration
kubernetesVersion: v1.20.0
networking:
dnsDomain: cluster.local
serviceSubnet: 10.96.0.0/12
podSubnet: 10.244.0.0/16 # 添加pod子网
scheduler: {}
kubeadm config images pull --config kubeadm-config.yaml
kubeadm init --config kubeadm-config.yaml
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get node
所有node上执行
如果已经消失使用kubeadm token create --print-join-command重新生成即可
kubeadm join 192.168.0.66:6443 --token abcdef.01xxxx3456789abcdef \
--discovery-token-ca-cert-hash sha256:92b7ba32b5f23d6d43ee8a2b7273be234dxxxxxx7dcb7adce7ff10fcd5beb4be0bc
kubectl get node
只在master上执行,这里选择使用flannel,github地址https://github.com/flannel-io/flannel
k8s并没有专门的网络模块负责网络配置,它需要用户在主机上已经配置好网络。
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
kubectl get node
#让master也可以部署应用
kubectl taint node master01 node-role.kubernetes.io/master:NoSchedule-
#部署一个测试web服务器
kubectl create deployment web --image=nginx
#暴露端口
kubectl expose deployment web --port=80 --target-port=80 --type=NodePort
#扩容
kubectl scale deployment web --replicas=3
#查看状态
kubectl get pod,svc
本文分享自 NetCore 从壹开始 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!