关闭防火墙
systemctl stop firewalld ; systemctl disable firewalld
setenforce 0
sed -i.bak 's@SELINUX=.*@SELINUX=disabled@g' /etc/selinux/config
swapoff -a && sudo sed -i '/swap/ s/^/#/' /etc/fstab && mount -a
内核参数修改
echo "modprobe br_netfilter" >> /etc/profile
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
EOF
sysctl -p /etc/sysctl.d/k8s.conf 配置阿里云 Kubernetes yum 源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF安装基础软件包
yum -y install epel-release yum-utilsyum -y install device-mapper-persistent-data lvm2 wget net-tools nfs-utils iptables-services lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo libaio-devel wget vim ncurses-devel autoconf automake zlib-devel openssh-server socat ipvsadm conntrack telnet iptables-services nginx-mod-stream开启ipvs
开启 ipvs
不开启 ipvs 将会使用 iptables,但是效率低,所以官网推荐需要开通 ipvs 内核
tee ipvs.modules <<-'EOF'
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ 0 -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
EOF
chmod 755 ipvs.modules && bash ipvs.modules && lsmod | grep ip_vs
安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io -y启动docker
systemctl start docker && systemctl enable docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://hxn0tro1.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl daemon-reload && systemctl restart docker && docker info |egrep " Cgroup Driver:" && systemctl status docker --no-pager安装kubeadm
# 查看版本
yum search kubelet --showduplicates | sort -r
yum -y install kubelet-1.23.0 kubeadm-1.23.0 kubectl-1.23.0
systemctl enable kubelet下载镜像
tee image.txt <<-'EOF'
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.20.6
docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.20.6
docker pull calico/pod2daemon-flexvol:v3.18.0
docker pull calico/node:v3.18.0
docker pull calico/cni:v3.18.0
docker pull calico/kube-controllers:v3.18.0
docker pull registry.aliyuncs.com/google_containers/etcd:3.4.13-0
docker pull registry.aliyuncs.com/google_containers/coredns:1.7.0
docker pull registry.aliyuncs.com/google_containers/pause:3.2
EOF
bash image.txt使用kubeadm初始化集群
kubeadm init --kubernetes-version=1.23.0 --image-repository registry.aliyuncs.com/google_containers --apiserver-advertise-address=192.168.4.6 --service-cidr=10.10.0.0/16 --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=all --v=5注:--image-repository registry.aliyuncs.com/google_containers 为保证拉取镜像不到国外站点拉取,手动指定仓库地址为 registry.aliyuncs.com/google_containers。kubeadm 默认从k8ss.grc.io 拉取镜像。 本地有导入到的离线镜像,所以会优先使用本地的镜像
节点注册命令保存下来,以备稍后使用
--discovery-token-ca-cert-hash sha256:cbc4154daaba6b6a1355a7c54ec22ecdafab566464fd7ed257097dafedeb7065
配置 kubectl 的配置文件,保存一个证书,这样 kubectl 命令可以使用这个证书对 k8s 集群进行管理
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
# kubectl get nodes安装网络插件
calico
# 使用 Calico 网络插件
$ kubectl apply -f https://docs.projectcalico.org/manifests/calico.yamlFlannel
# 使用 Flannel 网络插件
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
# 或者访问
https://gitee.com/kexinzz/helm/blob/master/kube-flannel.ymlnode污点
这里我们会发现node节点污点,删除不掉

于是,我们就更改pod yaml接受容忍
#找到yaml文件中 tolerations: 字段添加如下内容
tolerations:
- key: node.kubernetes.io/not-ready
operator: Exists
effect: NoSchedule
#完成后我们部署pod插件,就可以看到pod成功部署了
验证k8s



加入工作节点
使用这些信息来生成新的join命令
kubeadm token create --print-join-command在每个工作节点上,运行之前保存的加入命令,例如
# 在工作节点上运行加入命令
$ sudo kubeadm join <Master节点IP>:<Master节点端口> --token <Token> --discovery-token-ca-cert-hash <CA证书哈希值>
$ kubeadm join 192.168.4.6:6443 --token 6n60gw.od78mw7dtoyuz8dn \
--discovery-token-ca-cert-hash sha256:e53b20f5eeb50b5f503da46af84e0c74fe736245d32321176d9a0c0f1a119c9f \
--node-name=192.168.4.7 --v=5请注意,上述命令中的
添加master节点
生成 Join Token
在现有的某个 master 节点上,获取一个用于加入的 token 和 etcd 参数
kubeadm init phase upload-certs --upload-certs这会返回一个证书和一个启动的使用 token。
使用这些信息来生成新的 join 命令
kubeadm token create --print-join-command加入新的 Master 节点
kubeadm join <master-ip>:<master-port> --token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane --certificate-key <certificate-key> \
--node-name=192.168.4.7 --v=5验证集群状态
一旦kubeadm join命令成功完成,在新节点上检查kubelet和kubeadm
kubectl get nodes

评论 (0)