docker,k8s安装,k8s集群搭建(OS7)

集群部署

ip: 192.168.171.4 ,192.168.171.5 ,192.168.171.6

1.设置主机名

bash 复制代码
# 在 192.168.171.4 执行
hostnamectl set-hostname k8s-master
# 在 192.168.171.5 执行
hostnamectl set-hostname k8s-node1
# 在 192.168.171.6 执行
hostnamectl set-hostname k8s-node2

2.配置 hosts

bash 复制代码
cat <<EOF >> /etc/hosts
	192.168.171.4 k8s-master
	192.168.171.5 k8s-node1
	192.168.171.6 k8s-node2
EOF
  1. 关闭 SELinux
bash 复制代码
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/'
/etc/selinux/config
  1. 关闭 Swap

    bash 复制代码
    # 临时关闭
    swapoff -a && sysctl -w vm.swappiness=0
    # 永久关闭(注释掉 swap 行)
    sed -ri '/^[^#]*swap/s@^@#@' /etc/fstab
  2. 防火墙

bash 复制代码
sudo firewall-cmd --permanent --zone=public \
  --add-port=6443/tcp \
  --add-port=10250/tcp \
  --add-port=10251/tcp \
  --add-port=10252/tcp \
  --add-port=10255/tcp \
  --add-port=8472/udp

sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

6.开启 iptables 桥接流量

bash 复制代码
modprobe br_netfilter

cat <<EOF | tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

sysctl --system
  1. 时间同步
bash 复制代码
yum install -y ntpdate
ntpdate time.windows.com

8.确保节点互通(验证)

bash 复制代码
ping -c 3 192.168.171.4
ping -c 3 192.168.171.5
ping -c 3 192.168.171.6

9.所有节点安装 Docker

bash 复制代码
# 安装 yum 工具
yum install -y yum-utils
# 添加阿里云 Docker 源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装指定版本
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24
# 配置镜像加速 + systemd cgroup driver
mkdir -pv /etc/docker
tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors" : [
"https://hmhv5tp5.mirror.aliyuncs.com" ,
"https://mirror.baidubce.com" ,
"https://do.nark.eu.org" ,
"https://do.nark.eu.org" ,
"https://dc.j8.work" ,
"https://docker.m.daocloud.io" ,
"https://dockerproxy.com" ,
"https://docker.mirrors.ustc.edu.cn" ,
"https://docker.nju.edu.cn" ,
"https://dockerhub.icu" ,
"https://docker.chenby.cn" ,
"https://docker.1panel.live" ,
"https://docker.awsl9527.cn" ,
"https://docker.anyhub.us.kg" ,
"https://dhub.kubesre.xyz" ,
"https://docker.m.daocloud.io" ,
"https://docker.xuanyuan.me" ,
"https://docker.1ms.run"
],
"exec-opts" : [ "native.cgroupdriver=systemd" ]
}
EOF

# 启动 Docker
systemctl daemon-reload
systemctl enable --now docker.service
systemctl restart docker.service

# 验证
docker info | grep Cgroup
  1. 所有节点安装 kubeadm、kubelet、kubectl
bash 复制代码
# 配置阿里云 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=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
# 安装
yum install -y kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0
# 启动 kubelet(此时会不断重启,属于正常现象,初始化后恢复)
systemctl enable --now kubelet

11.Master 节点初始化

bash 复制代码
cat <<EOF > /root/kubeadm-config.yaml
apiVersion: kubeadm.k8s.io/v1beta3
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 192.168.171.4
  bindPort: 6443
nodeRegistration:
  name: k8s-master
  criSocket: /var/run/dockershim.sock
---
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
kubernetesVersion: v1.23.17
imageRepository: registry.aliyuncs.com/google_containers
controlPlaneEndpoint: 192.168.171.4:6443
networking:
  dnsDomain: jiazhong.com
  serviceSubnet: 10.200.0.0/16
  podSubnet: 10.100.0.0/16
etcd:
  local:
    dataDir: /var/lib/etcd-k8s
    extraArgs:
      listen-client-urls: "https://127.0.0.1:12379,https://192.168.171.4:12379"
      advertise-client-urls: "https://192.168.171.4:12379"
      listen-peer-urls: "https://192.168.171.4:12380"
      initial-advertise-peer-urls: "https://192.168.171.4:12380"
      initial-cluster: "k8s-master=https://192.168.171.4:12380"
apiServer:
  extraArgs:
    etcd-servers: "https://192.168.171.4:12379"
EOF

执行初始化

bash 复制代码
kubeadm init --config=/root/kubeadm-config.yaml

初始化成功后,按提示执行

bash 复制代码
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

保存好最后输出的 kubeadm join 命令,Worker 节点需要用到。如果丢失,可用以下命令重新获取:

bash 复制代码
# 重新生成 token
kubeadm token create --print-join-command

12.Worker 节点加入集群

192.168.171.5192.168.171.6 上分别执行 Master 输出的 join 命令,格式如下(请使用你实际生成的):

复制代码
kubeadm join 192.168.171.4:6443 --token ekpkts.vzru73gs96sr0ywe \
        --discovery-token-ca-cert-hash sha256:72ba95d8a2721f7630de48b62637de2ce3f5c9dbda4134592ed5906be34adaaa

Master 上查看节点

bash 复制代码
kubectl get nodes
  1. 部署 Flannel 网络插件(Master 执行)(网络原因github连接不上)

    bash 复制代码
    mkdir -p /apps/kubernetes/cni/flannel
    cd /apps/kubernetes/cni/flannel
    
    # 下载
    wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
    
    # 修改 Pod CIDR 为 10.100.0.0/16
    sed -i 's|"Network": "10.244.0.0/16"|"Network": "10.100.0.0/16"|g' kube-flannel.yml
    
    # 部署
    kubectl apply -f kube-flannel.yml

    等待所有 Pod 变为 Running

bash 复制代码
kubectl get pods -n kube-flannel
kubectl get nodes

使用 systemd service post‑exec 强制设置 docker0 mtu=1450

bash 复制代码
cat > /etc/docker/daemon.json <<'EOF'
{
  "mtu": 1450,
  "registry-mirrors": ["https://hub-mirror.aliyuncs.com"]
}
EOF

mkdir -p /etc/systemd/system/docker.service.d
cat > /etc/systemd/system/docker.service.d/fix-mtu.conf <<'EOF'
[Service]
ExecStartPost=/sbin/ip link set dev docker0 mtu 1450
EOF

关闭 nftables、firewalld

复制代码
systemctl stop nftables && systemctl disable nftables systemctl stop firewalld && systemctl disable firewalld

14.创建测试服务

bash 复制代码
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort

15.查看服务

bash 复制代码
kubectl get po,svc

输出示例中会有类似 80:3xxxx/TCP 的端口映射,用任意节点 IP + 该端口访问测试:

bash 复制代码
curl 192.168.171.4:3xxxx
curl 192.168.171.5:3xxxx
curl 192.168.171.6:3xxxx

16.在其他节点使用 kubectl

bash 复制代码
# 在 Master 上复制证书
scp /etc/kubernetes/admin.conf k8s-node1:/etc/kubernetes/
scp /etc/kubernetes/admin.conf k8s-node2:/etc/kubernetes/

# 在 Node1/Node2 上配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
source ~/.bash_profile

17.开启命令自动补全

bash 复制代码
# 临时生效
source <(kubectl completion bash)
# 永久生效
echo "source <(kubectl completion bash)" >> ~/.bashrc
  1. 重要检查:确保 PG 集群不受影响

    bash 复制代码
    # 检查 Patroni 状态
    su - postgres -c "patronictl -c /etc/patroni/patroni.yml list"
    # 检查 PG etcd(注意:这是你的 PG  etcd,不是 K8s 的)
    ETCDCTL_API=3 etcdctl endpoint health --endpoints=192.168.171.4:2379,192.168.171.5:2379,192.168.171.6:2379
    # 检查 K8s etcd(仅 Master 有,监听 12379/12380)
    ETCDCTL_API=3 etcdctl endpoint health --endpoints=https://192.168.171.4:12379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key

19.常用命令速查

bash 复制代码
# 查看节点
kubectl get nodes
# 查看所有命名空间 Pod
kubectl get pods -A
# 查看 kube-system Pod
kubectl get pods -n kube-system
# 查看组件状态
kubectl get cs
# 查看 Flannel Pod
kubectl get pods -n kube-flannel
# 查看 K8s  etcd 静态 Pod 日志(Master)
kubectl logs -n kube-system etcd-k8s-master
# 或
crictl ps | grep etcd
docker logs <etcd-container-id>   # 如使用 docker
相关推荐
guo_wen_qiang3 小时前
mac中docker desktop服务端开启远程访问
运维·服务器·macos·docker
Sayai4 小时前
Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南
大数据·elasticsearch·docker
名字还没想好☜10 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes
码--到成功11 小时前
Docker、Kubernetes安装系列 二
docker·容器·kubernetes
M--Y12 小时前
Docker镜像与仓库管理详解
docker·容器
mohesashou12 小时前
k8s的service
云原生·容器·kubernetes
starzy199012 小时前
虚拟化解决方案全景:软件虚拟化、硬件虚拟化与 Docker 的位置
运维·docker·容器
梦Arrebol14 小时前
Kubernetes 微服务
微服务·容器·kubernetes
想要成为老金高手16 小时前
Kubernetes 调度器详解:从 nodeName 到污点容忍
java·容器·kubernetes