配置节点间通信
节点直接不能通过主机名Ping通,coredns解析会有问题,resolver找不到kube-dns.kube-system.cluster.local
hostname # 查看本机
hosts文件写上对应ip 和 名称
172.16.21.235 master
172.16.21.255 node1
使节点直接能互相ping通
yum换源
mv CentOS-Base.repo CentOS-Base.repo.bak
mv epel.repo epel.repo.bak
wget http://mirrors.aliyun.com/repo/Centos-7.repo
wget http://mirrors.aliyun.com/repo/epel-7.repo
sudo yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum update
安装docker
yum install docker-ce
systemctl enable docker.service
systemctl start docker
# 普通用户docker权限,需要注销用户生效
sudo groupadd docker
sudo usermod -aG docker ${USER}
docker换源
这里有个细节,偷偷把cgroupdriver=systemd了,,不然init阶段会出现failed to create kubelet: misconfiguration: kubelet cgroup driver: "cgroupfs" is different from docker cgroup driver: "systemd"
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://m0m3chw3.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
yum配置k8s源
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 update
安装kubelet,kubeadm,kubectl
yum install -y kubelet-1.19.3 kubeadm-1.19.3 kubectl-1.19.3 --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
Master init集群
image-repository指定国内镜像仓库,默认为谷歌仓库可能拉不下来,修改apiserver-advertise-address指定本机ip
kubeadm init \
--apiserver-advertise-address=172.16.21.235 \
--image-repository registry.aliyuncs.com/google_containers \
--pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.19.3
按照提示信息操作
这配置文件可以放到任何用户下,root用户/普通用户都可以放一份都将可以直接使用kubectl命令,node节点copy过去所有node上的用户都可以使用
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
允许pod部署到master节点
先允许pod部署到master节点,后面的flannel等都需要节点部署,后续加入node节点可以再撤销
kubectl taint node k8s-master node-role.kubernetes.io/master-
恢复:
kubectl taint node centost-aiplatformtextin-8029 node-role.kubernetes.io/master=:NoSchedule
配置内部通信 flannel 网络
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f kube-flannel.yml
# 查看是否成功,一般是pod拉取失败,需要换镜像仓库
kubectl get pods -n kube-system
子节点加入集群
#主节点运行会生成token 和 ca 替换下面的token和ca
kubeadm token create
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \
openssl dgst -sha256 -hex | sed 's/^.* //'
#子节点
kubeadm join 10.2.8.123:6443 --token isj2oo.cjcypoxy6958vcba\
--discovery-token-ca-cert-hash sha256:247158a11e8e10ba1abd17f7235842aefbe0f3be6365c8ea06e4ece3c4a00585
ingress-nginx安装
官网:https://kubernetes.github.io/ingress-nginx/deploy/
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.41.2/deploy/static/provider/baremetal/deploy.yaml
kubectl apply -f deploy.yaml
更改里面的镜像:可以拉到的镜像,下面有更改ingress端口操作,看自己需要
常用命令
给node打标签默认是
kubectl label node centos-dpsopenresty-16102 node-role.kubernetes.io/node=
删除节点
kubectl delete nodes node06
修改ingress端口范围为指定80端口
默认情况下,k8s 集群 nodePort 分配的端口范围为:30000-32767,如果我们指定的端口不在这个范围就会报错:
- 修改 /etc/kubernetes/manifests/kube-apiserver.yaml 文件,在 command 下添加 --service-node-port-range=1-65535 参数,添加 nodePort 范围参数后会自动生效,无需进行其他操作:
vim /etc/kubernetes/manifests/kube-apiserver.yaml
- 修改ingress.yaml中的配置指定node port
spec:
type: NodePort
ports:
- name: http
port: 80
protocol: TCP
targetPort: http
nodePort: 80
- name: https
port: 443
protocol: TCP
targetPort: https
nodePort: 443