好消息好消息,阿里云全線降價(jià),大量服務(wù)提供免費(fèi)甚至永久的試用,趕緊來薅大廠羊毛吧,坐電梯即可直達(dá)!
送福利!阿里云熱門產(chǎn)品免費(fèi)領(lǐng)(含ECS),點(diǎn)擊進(jìn)入:https://click.aliyun.com/m/1000370359/
送福利!阿里云熱門產(chǎn)品免費(fèi)領(lǐng)(含ECS),點(diǎn)擊進(jìn)入:https://click.aliyun.com/m/1000370359/
送福利!阿里云熱門產(chǎn)品免費(fèi)領(lǐng)(含ECS),點(diǎn)擊進(jìn)入:https://click.aliyun.com/m/1000370359/
配套實(shí)驗(yàn)環(huán)境
點(diǎn)擊直達(dá)阿里云實(shí)驗(yàn)室
點(diǎn)擊直達(dá)阿里云實(shí)驗(yàn)室
點(diǎn)擊直達(dá)阿里云實(shí)驗(yàn)室文章來源:http://www.zghlxwxcb.cn/news/detail-421155.html
環(huán)境概覽
軟件 | 版本 | 數(shù)量 |
---|---|---|
CentOS | 7.9/8.x | 3 |
Docker | 23.0.3 | |
kubeadm | v1.27.1 | |
kubelet | v1.27.1 | |
kubectl | v1.27.1 |
基礎(chǔ)環(huán)境配置
關(guān)閉selinux和swap(云服務(wù)器可跳過此步驟)(每個(gè)節(jié)點(diǎn)操作)
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
swapoff -a
修改主機(jī)名(每個(gè)節(jié)點(diǎn)修改為正確的名字)
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02
設(shè)置主機(jī)映射(每個(gè)節(jié)點(diǎn)操作)
cat >> /etc/hosts <<EOF
k8s-master01_IP k8s-master01
k8s-node01_IP k8s-node01
k8s-node02_IP k8s-node02
配置免密登錄(每個(gè)節(jié)點(diǎn)都需要操作)—可選操作
# 一直回車就行
ssh-keygen
# 需要輸入目標(biāo)主機(jī)的密碼
ssh-copy-id root@k8s-master
ssh-copy-id root@k8s-node01
ssh-copy-id root@k8s-node02
修改時(shí)區(qū)(時(shí)區(qū)正確可以跳過)(每個(gè)節(jié)點(diǎn)操作)
timedatectl set-timezone Asia/Shanghai
# 時(shí)間同步
yum -y install ntpdate
ntpdate ntp.aliyun.com
systemctl restart rsyslog crond
配置內(nèi)核參數(shù)(每個(gè)節(jié)點(diǎn)操作)
modprobe overlay
modprobe ip_conntrack
# 加載網(wǎng)橋過濾模塊
modprobe br_netfilter
cat > /etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-iptables=1
net.bridge.bridge-nf-call-ip6tables=1
net.ipv4.ip_forward=1
net.ipv4.tcp_tw_recycle=0
vm.swappiness=0
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=1048576
fs.file-max=52706963
fs.nr_open=52706963
net.ipv6.conf.all.disable_ipv6=1
net.netfilter.nf_conntrack_max=2310720
EOF
# 加載內(nèi)核文件
sysctl -p /etc/sysctl.d/kubernetes.conf
# 配置ipvs功能
cat >/etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules && lsmod |grep -e ip_vs -e nf_conntrack_ipv4
cat << EOF >> /etc/sysconfig/kubelet
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
Docker、containerd安裝及配置
清除docker軟件包(每個(gè)節(jié)點(diǎn)操作)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
設(shè)置docker源并安裝docker-ce、containerd(每個(gè)節(jié)點(diǎn)操作)
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install docker-ce-23.0.3 docker-ce-cli-23.0.3 containerd.io -y
systemctl enable docker --now
k8s配置及安裝
配置k8s國(guó)內(nèi)源(每個(gè)節(jié)點(diǎn)操作)
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
安裝k8s相關(guān)軟件包(每個(gè)節(jié)點(diǎn)操作)
yum -y install vim kubelet kubeadm kubectl --disableexcludes=kubernetes
修改containerd配置
pause_version=`kubeadm config images list|grep pause|awk -F '/' '{print $NF}'`
containerd config default > /etc/containerd/config.toml
sed -i 's/registry.k8s.io\/pause:3.6/registry.aliyuncs.com\/google_containers\/'"${pause_version}"'/' /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
systemctl restart containerd
增加cni配置/etc/crictl.yaml,指定containerd端點(diǎn)
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///var/run/containerd/containerd.sock
image-endpoint: unix:///var/run/containerd/containerd.sock
timeout: 0
debug: false
pull-image-on-create: false
EOF
啟動(dòng)Kubelet
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile
source /etc/profile
systemctl enable kubelet --now
master節(jié)點(diǎn)拉取k8s鏡像(master節(jié)點(diǎn)操作)
cat > images.sh <<EOF
#!/bin/bash
url=registry.aliyuncs.com/google_containers
version=(\`kubelet --version|awk -F " " '{print $2}'\`)
images=(\`kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print \$NF}'\`)
org_hub=(\`kubeadm config images list --kubernetes-version=$version|awk -F '/' 'NR==1{print \$1}'\`)
for img in \${images[@]};do
docker pull \${url}/\$img
docker tag \$url/\$img \${org_hub}/\$img
docker rmi -f \$url/\$img
done
EOF
chmod +x images.sh
./images.sh
生成初始化文件(master節(jié)點(diǎn)操作)
kubeadm config print init-defaults > kubeadm-config.yaml
修改kubeadm-config.yaml文件(master節(jié)點(diǎn)操作)
version=`kubelet --version|awk -F " " '{print $2}'`
adm_name=`hostname`
adm_ip=`hostname -I|awk -F " " '{print $1}'`
sed -i 's/name: node/name: '"${adm_name}"'/' kubeadm-config.yaml
sed -i 's/1.2.3.4/'"${adm_ip}"'/' kubeadm-config.yaml
sed -i '/serviceSubnet/a\ podSubnet: 10.244.0.0/16' kubeadm-config.yaml
sed -i 's/registry.k8s.io/registry.aliyuncs.com\/google_containers/' kubeadm-config.yaml
sed -i 's/1.27.0/'"${version}"'/' kubeadm-config.yaml
# 初始化集群
kubeadm init --config=kubeadm-config.yaml
設(shè)置k8s環(huán)境(master節(jié)點(diǎn)操作)
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
# 將admin.conf文件拷貝給其他節(jié)點(diǎn)
scp /etc/kubernetes/admin.conf root@k8s-node01:/etc/kubernetes/
scp /etc/kubernetes/admin.conf root@k8s-node02:/etc/kubernetes/
node1/2配置環(huán)境
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
部署網(wǎng)絡(luò) - flannel(master節(jié)點(diǎn)操作)
kubectl create -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 查看pod狀態(tài)
kubectl get pod -n kube-system
node節(jié)點(diǎn)加入集群
用mater節(jié)點(diǎn)初始化輸出的kubeadm join命令來操作,以下為示例
文章來源地址http://www.zghlxwxcb.cn/news/detail-421155.html
kubeadm join 172.16.22.24:6443 --token 8unt75.7rey15tpqsu1nxvs \ --discovery-token-ca-cert-hash sha256:3c7c07f74c965f26e0b51392103509ce4c5cdbc2ba0be49c9d98cf3679d21cdc
部署nginx測(cè)試
# 部署
kubectl create deployment nginx --image=nginx:1.20-alpine
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看狀態(tài),查看對(duì)應(yīng)開放的外部端口
kubectl get pods,service
# 可以用瀏覽器訪問服務(wù)器的外部IP和端口
# 刪除部署和服務(wù)
kubectl delete deployment nginx
kubectl delete service nginx
到了這里,關(guān)于CentOS 7/8使用kubeadm部署kubernets(k8s)集群【附阿里云實(shí)驗(yàn)室】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!