安装k8s 1.29单机版
单机版环境设置
版本信息
- kubernetes: 1.29.2
- etcd: 3.5.10
- 容器运行时:containerd 1.6.28
- 虚拟机系统:centos 7.9
- 虚拟机内核版本:5.4.238-1.el7.elrepo.x86_64
虚拟机设置
- 参考:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
- 设置主机名
# dev:
hostnamectl set-hostname kube-master
- 设置hosts
cat >> /etc/hosts <<EOF
192.168.76.135 kube-master
EOF
- 自动同步时间
yum -y install ntp
systemctl start ntpd
systemctl enable ntpd
- 关闭firewalld, selinux, swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
- 启用ip_vs模块
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack
modprobe overlay
modprobe br_netfilter
cat > /etc/modules-load.d/ip_vs.conf << EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
overlay
br_netfilter
EOF
- 安装ipvsadm
yum install ipvsadm -y
- 调整内核参数
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system
安装基础组件
- 安装containerd
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install containerd -y
containerd config default > /etc/containerd/config.toml
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sed -i 's#sandbox_image =.*#sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"#' /etc/containerd/config.toml
sed -i '/.*plugins."io.containerd.grpc.v1.cri".registry.mirrors.*/ a\ [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]\n endpoint = ["https://registry.aliyuncs.com/google_containers"]\n [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]\n endpoint = ["https://registry.aliyuncs.com/google_containers"]\n [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]\n endpoint = ["https://usydjf4t.mirror.aliyuncs.com"]' /etc/containerd/config.toml
systemctl start containerd
systemctl enable containerd
systemctl status containerd
- 安装kubeadm、kubelet 和 kubectl
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=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 kubelet kubeadm kubectl --disableexcludes=kubernetes
systemctl enable kubelet && systemctl start kubelet
# kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。
- 安装kubernetes-cni
yum install -y kubernetes-cni
- 配置kubectl命令补全
yum install bash-completion -y
source <(kubectl completion bash)
echo "source <(kubectl completion bash)" >> ~/.bashrc
安装k8s单机版【如需重新安装,可反复执行此部分】
-
何时需要重置k8s集群
- 安装失败,需要反复调试
- 物理机死机后强制关机,导致etcd数据丢失
- 测试新组件,如新的网络组件、存储组件、容器运行时等
-
重置k8s集群
kubeadm reset
rm -rf $HOME/.kube
ipvsadm --clear
- 预下载基础镜像
[root@kube-master ~]# kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-apiserver:v1.26.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-controller-manager:v1.26.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-scheduler:v1.26.0
[config/images] Pulled registry.aliyuncs.com/google_containers/kube-proxy:v1.26.0
[config/images] Pulled registry.aliyuncs.com/google_containers/pause:3.9
[config/images] Pulled registry.aliyuncs.com/google_containers/etcd:3.5.6-0
[config/images] Pulled registry.aliyuncs.com/google_containers/coredns:v1.9.3
-
初始化k8s集群
- 参考:https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/create-cluster-kubeadm/#pod-network
- 安装:
kubeadm init --pod-network-cidr=10.244.0.0/16 --image-repository=registry.aliyuncs.com/google_containers mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # coredns处于pending状态,等待安装网络组件 kubectl get pods -n kube-system -
移除控制节点的污点
kubectl taint node kube-master node-role.kubernetes.io/control-plane:NoSchedule- -
安装flannel网络组件
- 参考:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/addons/#networking-and-network-policy
- 特点:安装速度快,网络性能一般,适合小规模k8s集群。
- 安装:
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml kubectl get pods -n kube-flannel -
测试k8s集群
[root@kube-master ~]# cd yaml/test/
[root@kube-master test]# cat 1-two-pod-volume.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp1
spec:
containers:
- name: tomcat
image: "tomcat"
ports:
- containerPort: 8080
name: http
volumeMounts:
- name: app-logs
mountPath: /usr/local/tomcat/logs
- name: busybox
image: busybox
command: ["sh", "-c", "tail -f /logs/catalina*.log"]
volumeMounts:
- name: app-logs
mountPath: /logs
volumes:
- name: app-logs
emptyDir: {}
restartPolicy: Always
[root@kube-master test]#
[root@kube-master ~]# kubectl apply -f pod-myapp.yaml
pod/myapp1 created
[root@kube-master test]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp1 0/2 ContainerCreating 0 8s
[root@kube-master test]# kubectl get pods
NAME READY STATUS RESTARTS AGE
myapp1 2/2 Running 0 2m7s
[root@kube-master test]# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp1 2/2 Running 0 3m37s 10.244.0.6 kube-master <none> <none>
[root@kube-master test]# curl 10.244.0.6:8080
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/10.0.14</h3></body></html>[root@kube-master test]#
[root@kube-master test]#
[root@kube-master test]#
[root@kube-master test]# kubectl logs myapp1 -c busybox
01-Mar-2024 02:47:53.084 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
01-Mar-2024 02:47:53.112 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.31] using APR version [1.7.0].
01-Mar-2024 02:47:53.112 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
01-Mar-2024 02:47:53.129 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 1.1.1k 25 Mar 2021]
01-Mar-2024 02:47:54.418 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
01-Mar-2024 02:47:54.507 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [2267] milliseconds
01-Mar-2024 02:47:54.749 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
01-Mar-2024 02:47:54.750 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/10.0.14]
01-Mar-2024 02:47:54.781 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
01-Mar-2024 02:47:54.828 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [320] milliseconds
[root@kube-master test]#