# 官方提供@yunTaoScripts K8S 快速搭建 🔥🔥

loading

确认硬件资源架构 🥸

目前主要分为 armX86架构两种,本文基于苹果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网络不通_

最后修改时间: 12/31/2022, 12:00:03 PM