Saturday, March 11, 2023

Kubernetes 部署

 1. 配置yum源

sudo yum install -y yum-utils

sudo yum-config-manager \

-- add-repo \

https://download.docker.com/linux/centos/docker-ce.repo


2. 安装docker

sudo yum install -y docker-ce docker-ce-cli contanerd.io


3. 启动

# --now 开机启动

systemctl enable docker --now


4. 配置加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json << -'EOF'

{

  "registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],

"exec-opts": ["native.cgroupdriver=systemd"],

"log-driver": "json-file",

"log-opts": {

    "max-size": "100m"

},

"storage-driver": "overlay2"

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker


5. 安装Kubernetes

# 设置主机名,各个机器设置自己的域名

hostnamectl set-hostname k8s-master

hostnamectl set-hostname k8s-node1

hostnamectl sethostname k8s-node2


# 将SELinux 设置为permissive 模式(相当于将其禁用) 关闭swap

sudo setenforce 0

sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config


# 关闭swap

swapoff -a

sed -ri 's/.*swap.*/#&/' /etc/fstab


# 允许 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


6 安装三大件kubelet, kubeadm, kubectl

 cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo

[kubernetes]

name=Kubernetes

baseurl=http://..../kubernetes-el7-x86_64

enable=1

gpgcheck=0

repo_gpgcheck=0

gpgkey=http://....../kubernetes/yum/doc/yum-key.gpg http://....../kubernetes/yum/doc/rpm-package-key.gpg

execlude=kubelet kubeadm kubectl

EOF


sudo yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9 --disableexcludes=kubernetes

sudo systemctl enable --now kubelet


#检查kubelet

systemctl status kubelet


7. 使用kubeadm引导集群

# 下载各个机器需要的镜像

sudo tee ./images.sh <<-'EOF'

#! /bin/bash

images=(

kube-apiserver:v1.20.9

kube-proxy:v1.20.9

bube-controller-manager:v1.20.9

kube-scheduler:v1.20.9

coredns:1.7.0

etcd:3.4.13-0

pause:3.2

)

for imageName in ${images[@]} ; do

docker pull registry.....com/lfy_k8s_images/$imageName

done

EOF

#执行下载

chmod +x ./images.sh && ./images.sh


8. 主节点

#所有机器添加master域名映射,以下需要修改为自己的

echo "172.32.0.2 cluster-endpoint" >> /etc/hosts


# 主节点初始化

kubeadm init \

--apiserver-advertise-address=172.32.0.2  \ #这个ip一定是主节点的master ip

--control-plane-endpoint=cluster-endpoint \ #这个cluster-endpoint 是主节点域名的值

--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \

--kubernetes-version v1.20.9 \

--service-cidr=10.96.0.0/16 \ #k8s的网络负载均衡的时候用的

--pod-network-cidr=192.168.0.0/16

#一般这个ip
不用改--service-cidr=10.96.0.0/16和--pod-network-cidr=192.168.0.0/16,如果改,ip跟所有网络范围不重叠,比如172.32.0.2

上面运行完会出现下图

这个图里有几个重要的命令行需要运行

然后运行

mkdir -p $HOME/ .kube #创建目录

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config #复制到config

sudo chown $(id -u):$(id -g) $HOME/.kube/config #给权限


如果想加入主节点需要运行,也就是别的机器当做主节点或加入到主节点,运行上图下面的命令

kubeadm join cluster-endpoint:6443 --token ......... \

--discovery-token-ca-cert-hash sha256: ...... \

--control-plane


如果想加入工作节点需要运行上图下面的操作

kubeadm join cluster-endpoint:6443 --token ......... \

--discovery-token-ca-cert-hash sha256: ...... 

但是加节点的生成的命令行是有时效的,24小时有效,如果超时了,需要生成新的令牌token, 所有命令都是在master里运行

kubeadm token create --print-join-command


运行kubectl get nodes     去查看nodes


在master里下载插件的配置文件,比如calico

curl https://..../calico.yaml -O

然后执行这个配置文件

kubectl apply -f calico.yaml

# 如果之前改过 --pod-network-cidr=192.168.0.0/16 的IP地址,这个时候,calico 的配置文件的ip地址也需要更改


Kubeernetes 的简单命令

# 查看集群所有节点,只能在master里查看

kubectl get nodes


# 根据配置文件,给集群创建资源

kubectl apply -f xxx.yaml


# 查看集群部署了哪些应用

docker ps

kubectal get pods -A


# 运行中的应用在docker里叫容器,在k8s里叫pod


# 节点node加入


No comments: