# 官方提供@yunTaoScripts K8S 快速搭建 🔥🔥
确认硬件资源架构 🥸
目前主要分为 arm
和X86
架构两种,本文基于苹果macbook pro M1
,所以后文都是在arm资源上进行搭建。
# 基础配置修改
# 修改yaml源
http://archive.ubuntu.com/ubuntu/
#修改成国内阿里云库:
http://mirrors.aliyun.com/ubuntu/(x86)
https://mirrors.aliyun.com/ubuntu-ports/ (arm)
wget http://mirrors.aliyun.com/repo/Centos-altarch-7.repo -O /etc/yum.repos.d/CentOS-Base.repo
# 关闭交换分区
#关闭swap
swapoff -a
rm -f /swap.img
vim /etc/fstab
# /swap.img
#开启ip转发
cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#查看状态
sysctl --load /etc/sysctl.d/k8s.conf
sysctl -p
firewall-cmd --state
systemctl stop firewalld.service
systemctl disable firewalld.service
# 设置host
cat >> /etc/hosts << EOF
10.211.55.11 master
10.211.55.12 node1
10.211.55.13 node2
EOF
cat >> /etc/hosts << EOF
10.211.55.111 ctsm1
10.211.55.112 ctsn1
10.211.55.113 ctsn2
EOF
# 静态网络配置
/etc/netplan/
network:
version: 2
renderer: networkd
ethernets:
ens33: #配置的网卡名称
dhcp4: no #dhcp4关闭
dhcp6: no #dhcp6关闭
addresses: [192.168.123.11/24] #设置本机IP及掩码
gateway4: 192.168.123.2 #设置网关
nameservers:
addresses: [114.114.114.114, 8.8.8.8] #设置DNS
# 安装docker
- 国内源
ubuntu
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#######x86
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#######arm
sudo add-apt-repository "deb [arch=arm64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
#######
sudo apt-get -y update
apt install -y docker-ce
#systemctl enable docker
centos
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
# 注意:
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,您可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将[docker-ce-test]下方的enabled=0修改为enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
- 国外源
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
apt-cache madison docker-ce
sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
# 配置docker
cat <<EOF > /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://wi175f8g.mirror.aliyuncs.com"]
}
EOF
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# 安装kubelet kubeadm kubect
curl -s https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
cat << EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://mirrors.ustc.edu.cn/kubernetes/apt kubernetes-xenial main
EOF
apt update && apt install -y kubelet=1.22.0-00 kubeadm=1.22.0-00 kubectl=1.22.0-00
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-aarch64/
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 install -y --nogpgcheck kubelet-1.22.2-0 kubeadm-1.22.2-0 kubectl-1.22.2-0 --disableexcludes=kubernetes
systemctl restart kubelet ; systemctl enable kubelet
# K8S系统镜像
docker pull v5cn/kube-apiserver:v1.22.6
docker tag v5cn/kube-apiserver:v1.22.6 k8s.gcr.io/kube-apiserver:v1.22.6
docker save k8s.gcr.io/kube-apiserver:v1.22.6 > kube-apiserver:v1.22.6.tar
docker load -i kube-apiserver:v1.22.6.tar
# 查看kubelet日志
journalctl -xefu kubelet
# 初始化集群
kubeadm init \
--apiserver-advertise-address=10.211.55.121 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.2 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
kubeadm join 10.211.55.121:6443 --token pm0bor.o9n6e3l1yhd6gsuj --discovery-token-ca-cert-hash sha256:8a6ffc07308a250af3b2e4aafb4bc00994958e120ce289d2ee96e756efbe0d93
# 添加令牌
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
- 或者
echo "export KUBECONFIG=/etc/kubernetes/admin.conf >> /etc/profile"
# 忘记加入集群的命令方法
kubeadm token create --print-join-command
# 配置kubectl自动补全
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 安装calico网络
- 下载yaml文件
wget https://docs.projectcalico.org/manifests/calico.yaml
- 修改calico.yaml里的pod网段。把calico.yaml里pod所在网段改成kubeadm init时选项--pod-network-cidr所指定的网段, 直接用vim编辑打开此文件查找192,按如下标记进行修改:
# no effect. This should fall within `--cluster-cidr`.
# - name: CALICO_IPV4POOL_CIDR
# value: "192.168.0.0/16"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
把两个#及#后面的空格去掉,并把192.168.0.0/16改成10.244.0.0/16
# no effect. This should fall within `--cluster-cidr`.
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
# Disable file logging so `kubectl logs` works.
- name: CALICO_DISABLE_FILE_LOGGING
value: "true"
curl https://registry.hub.docker.com/v1/repositories/nginx/tags
# 安装metric server
Kubernetes Metrics Server (opens new window)
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls # 增加自签名证书
# 配置etcd
- Etcd被形容为Kubernetes集群的大脑,是 Kubernetes的关键组件,因为它存储了集群的整个状态,其配置,规格以及运行中的工作负载的状态。 在Kubernetes世界中,etcd用作服务发现的后端,并存储集群的状态及其配置。Etcd被部署为一个集群,几个节点的通信由Raft算法处理。在生产环境中,集群包含奇数个节点,并且至少需要三个。
- 分布式数据库,两两之间进行同步,通过raft协议2380端口同步数据。三个节点会进行选举,往leader中写数据,往follower中读数据。客户端通过2379端口访问数据库。
# 下载rpm包
- --downloadonly:只下载
- --downloaddir=./etcd:指定目录
yum install etcd -y --downloadonly --downloaddir=./etcd
# 开启rpm包缓存
cat /etc/yum.conf
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=1 #开启缓存
find ./ -name *.rpm
./base/packages/net-tools-2.0-0.25.20131004git.el7.aarch64.rpm
###etcd流程 client 2379 etcd1 etcd2 ETCD集群是一个分布式系统,使用Raft协议来维护集群内各个节点状态的一致性。 主机状态 Leader, Follower, Candidate 当集群初始化时候,每个节点都是Follower角色 通过心跳与其他节点同步数据 当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一 次选主投票 配置etcd集群,建议尽可能是奇数个节点,而不要偶数个节点
# 设置代理
export https_proxy=http://10.211.55.2:7890 http_proxy=http://10.211.55.2:7890
⚠️_代理可能导致service网络不通_
← 快速链接 POD && 节点调度 🔥🔥 →