k8s 安装(通过 kubeadm 安装)
各组件作用介绍
- kubectl:向apiServer发送请求,执行相关的操作,如create,edit,delete,log...
- controller manager:监听apiServer,确认每个节点的信息,状态,以及pod控制器管理
- scheduler:监听当前没用绑定信息nodename为空的pod,根据pod配置亲和性来合理的调度到节点去关联
- kubelet:监听当前节点需要运行哪些pod,调用cri接口实现容器的创建
- kube-proxy:监听apiServer上节点相关的IPVS规则和防火墙规则,实现网络规则的制订
1.安装 docker(所有主机要安装)
安装 docker 环境
# 安装自动补全
yum install -y bash-completion
echo "source <(kubectl completion bash)" >> ~/.bashrc
# 一些工具
yum -y install wget psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git tar curl ipvsadm
# 关闭swap,selinux
# 永久关闭swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 临时关闭
swapoff -a
# 查看状态
free -h | grep Swap
swapon --show
# 临时关闭selinux
setenforce 0
# 查看状态
getenforce
# 永久关闭
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 加载bridge
yum install -y epel-release
yum install -y bridge-utils
modprobe br_netfilter &&
echo "br_netfilter" >> /etc/modules-load.d/bridge.conf &&
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf &&
echo "net.bridge.bridge-nf-call-iptables=1" >> /etc/sysctl.conf &&
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf &&
sysctl -p
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system
时间同步
# 服务端
yum install -y chrony
cat > /etc/chrony.conf << EOF
pool ntp1.aliyun.com iburst
pool ntp2.aliyun.com iburst
pool ntp3.aliyun.com iburst
driftfile /var/lib/chrony/drify
makestep 1.0 3
rtcsync
allow 192.168.123.0/24
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
EOF
systemctl restart chronyd
systemctl enable --now chronyd
# 客户端
yum install chrony -y
cat > /etc/chrony.conf << EOF
pool 192.168.123.10 iburst
pool 192.168.123.11 iburst
pool 192.168.123.12 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
EOF
systemctl restart chronyd
systemctl enable --now chronyd
# 客户端验证
chronyc sources -v
docker换源
# 进行简易代理
vim ~/.bash_profile
alias proxyOn='export http_proxy=http://192.168.123.5:7897; export https_proxy=http_proxy=http://192.168.123.5:7897'
alias proxyOff='unset http_proxy; unset https_proxy'
# 添加docker-ce yum源
# 中科大
sudo dnf config-manager --add-repo https://mirrors.ustc.edu.cn/dockerce/linux/centos/docker-ce.repo
# 阿里
sudo dnf config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cd /etc/yum.repos.d
# 切换中科大源
sed -o 's|download.docker.com|mirrors.ustc.edu.cn/docker-ce|g' docker-ce.repo
sudo yum makecache
# 安装docker-ce
yum -y install docker-ce
# 配置daemon
cat <<EOF>>/etc/docker/daemon.json
{
"default-ipc-mode": "shareable",
"data-root": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "100"
},
"insecure-registries": ["harbor.xinxainghf.com"],
"registry-mirrors": [
"https://zemxtma9.mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn"
]
}
EOF
# 重启服务
mkdir -p /etc/systemd/system/docker.service.d &&
systemctl daemon-reload && systemctl restart docker && systemctl enable docker
2.安装 cri-dockerd(所有主机要安装)
前往下载可执行压缩包
https://github.com/Mirantis/cri-dockerd/releases
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.0/cri-dockerd-0.4.0-3.fc35.x86_64.rpm
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.4.0/cri-dockerd-0.4.0.amd64.tgz
解压获取可执行文件移动到/usr/bin
tar -zxvf *.tar.gz
mv cri-dockerd/cri-dockerd /usr/bin/
chmod +x /usr/bin/cri-dockerd
创建服务文件
cat <<EOF>>/usr/lib/systemd/system/cri-docker.service
[Unit]
Description=CRI Interface for Docker Application Container Engine
Documentation=https://docs.mirantis.com
After=network-online.target firewalld.service docker.service
Wants=network-online.target
Requires=cri-docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
创建 socket 文件并启动
cat >>/usr/lib/systemd/system/cri-docker.socket<<EOF
[Unit]
Description=CRI Docker Socket for the API
PartOf=cri-docker.service
[Socket]
ListenStream=%t/cri-dockerd.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
systemctl daemon-reload
systemctl enable --now cri-docker
3.安装 kubelet、kubeadm 和 kubectl
cat <<EOF | tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.29/rpm/repodata/repomd.xml.key
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable kubelet
初始化主节点
kubeadm init \
--apiserver-advertise-address=192.168.123.10 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version 1.29.15 \
--service-cidr=10.10.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket unix:///var/run/cri-dockerd.sock \
--v=5
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
重新生成 work token
kubeadm token create --print-join-command
重置 k8s
sudo kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock
rm -rf /etc/kubernetes/ /var/lib/kubelet/ /var/lib/etcd/
sudo rm -rf /etc/cni/net.d /var/lib/cni
sudo iptables -F && sudo iptables -t nat -F && sudo iptables -t mangle -F && sudo iptables -X
4.部署网络插件(calico)
# 方案一:Operator 方式
kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/tigera-operator.yaml
# 修改 custom-resources.yaml 中的 cidr: 10.244.0.0/16
# 方案二:手动部署
curl https://raw.githubusercontent.com/projectcalico/calico/v3.28.2/manifests/calico.yaml -O
# 修改 CALICO_IPV4POOL_IPIP=off, CALICO_IPV4POOL_CIDR=10.244.0.0/16
kubectl apply -f calico.yaml
5.基本指令
# 官方资源简写
service svc
deployment deploy
pod po
replicationController rc
replicaSet rs
daemonset ds
job
cronJob cj
# 生成资源清单模板
kubectl create deploy myapp --image=wangyanglinux/myapp:v1.0 --dry-run=client -o yaml > deploy.yaml
# 获取资源
kubectl get pod -A -o wide --show-labels
kubectl get pod podName -o yaml
# 进入容器
kubectl exec -it podName -c containerName -- /bin/bash
# 查看日志
kubectl logs -n kube-system podName -c containerName
# 查看描述
kubectl describe pod podName
# 创建/更新/删除
kubectl apply -f pod.yaml
kubectl delete -f pod.yaml
# 标签操作
kubectl label pod podName version=v1
# 扩容
kubectl scale rc rcName --replicas=10
# 滚动更新
kubectl set image deployment/deployName containerName=image:v2
kubectl rollout status deployment/deployName
kubectl rollout history deployment/deployName
kubectl rollout undo deployment/deployName --to-revision=2
6.Pod 的生命周期

7.Pod 控制器 ReplicaSet(rs)
rs 相比 rc,在标签选择器上支持 matchExpressions 字段,提供更多选择方式。
8.service 的使用

# 修改 kube-proxy 模式为 ipvs
kubectl edit configmap kube-proxy -n kube-system
# mode: ipvs
kubectl delete pod -n kube-system -l k8s-app=kube-proxy
# 查看ipvs规则
ipvsadm -Ln