一.基础设置
1. 设置主机名
hostnamectl set-hostname master
hostnamectl set-hostname node01
vim /etc/hosts
172.31.187.45 master
172.31.187.44 node01
2. ssh免登
ssh-keygen #node生成密钥,一路回车
ssh-copy-id user@host #master拷贝密钥
3. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
4. 禁用SELINUX
# 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
5. 关闭swap分区
swapoff -a
sed -i 's/.*swap.*/#&/' /etc/fstab
6. 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
7. 放行端口
控制平面节点
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 6443 | Kubernetes API 服务器 | 所有组件 |
TCP | 入站 | 2379-2380 | etcd 服务器客户端 API | kube-apiserver, etcd |
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 10251 | kube-scheduler | kube-scheduler 自身 |
TCP | 入站 | 10252 | kube-controller-manager | kube-controller-manager 自身 |
工作节点
协议 | 方向 | 端口范围 | 作用 | 使用者 |
---|---|---|---|---|
TCP | 入站 | 10250 | Kubelet API | kubelet 自身、控制平面组件 |
TCP | 入站 | 30000-32767 | NodePort 服务† | 所有组件 |
二. 安装docker
yum install docker
systemctl start docker.service
systemctl enable docker.service
三. 安装kubeadm,kubelet,kubectl
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
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
四. 集群安装
1. 初始化集群
国内环境建议提前准备所需镜像以避免kubeadm init失败
查看所需镜像
kubeadm config images list
k8s.gcr.io/kube-apiserver:v1.22.2
k8s.gcr.io/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4
下载镜像(国内环境需要代理)
vim images_list.sh
#!/bin/bash
images_list='k8s.gcr.io/kube-apiserver:v1.22.2
k8s.gcr.io/kube-controller-manager:v1.22.2
k8s.gcr.io/kube-scheduler:v1.22.2
k8s.gcr.io/kube-proxy:v1.22.2
k8s.gcr.io/pause:3.5
k8s.gcr.io/etcd:3.5.0-0
k8s.gcr.io/coredns/coredns:v1.8.4'
for img in ${images_list}
do
docker pull ${img}
done
sh images_list.sh
初始化
需要注意的是,如果使用腾讯云,
apiserver-advertise-address
需要设置为内网IP (eth0网卡IP地址)
kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=172.31.187.45
2. 设置KUBECONFIG
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
3. flannel网络
国内服务器会因为镜像下载失败导致设置失败,需要手动安装镜像
- 查看yml中镜像版本,到https://github.com/coreos/flannel/releases 官方仓库下载相应镜像手动导入
docker load < flanneld-v0.14.0-amd64.docker
- 修改tag名使其与yam文件中镜像名保持一致
docker tag 8522d622299c quay.io/coreos/flannel:v0.14.0
- kubectl apply
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
4. node节点加入集群
kubeadm join 172.31.187.45:6443 --token 8xvtce.sjvzzaqkg9dp7375 --discovery-token-ca-cert-hash sha256:03c4632898741c6e0e8d3455dfe9781cf083848c8a16e73fb72690974aa34f59
5. 查看集群信息
kubectl get nodes
kubectl get pods --namespace kube-system
kubectl get cs
如果出现controller-manager scheduler
Unhealthy Get "http://127.0.0.1:10251/healthz": dial tcp 127.0.0.1:10251: connect: connection refused
image-20210927231712325则需要修改以下配置文件
/etc/kubernetes/manifests/kube-controller-manager.yaml
/etc/kubernetes/manifests/kube-scheduler.yaml
将相应文件中的
- --port=0
这一行注释掉,过一会再查看就正常了.
6. 测试
# 部署hello-world
kubectl run hello-world --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080
# 集群信息
kubectl get deployments hello-world
kubectl describe deployments hello-world
kubectl get replicasets
kubectl describe replicasets
# 创建service
kubectl expose deployment hello-world --type=NodePort --name=example-service
# 查看service
kubectl describe services example-service
kubectl get pods --selector="run=load-balancer-example" --output=wide
7. 安装dashboard
# 安装dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
# 删除dashboard
kubectl -n kube-system delete $(kubectl -n kube-system get pod -o name | grep dashboard)
网友评论