简介
Kubernetes是一个可移植的,可扩展的开源平台,用于管理容器化的工作负载和服务,。
安装前的准备
检查系统兼容性
Kubernetes 为基于 Debian 和 Red Hat 的通用 Linux 发行版提供了支持,对其他发行版提供了通用说明。
检查硬件配置
检查网络配置
- 确保集群中的设备可以互通(公有’DNS’或私有‘host’皆可)
- 集群中每个设备都需要独立的 Hostname, MAC 地址 和 Product_uuid。
- 使用
ifconfig -a
检测 Hostname, MAC 地址 是否冲突
- 使用
sudo cat /sys/class/dmi/id/product_uuid
检测 Product_uuid 是否冲突
- 检测集群中的端口是否开放
控制节点 Control-plane node(s)
所需端口如下:
协议类型 |
绑定方式 |
端口区域 |
作用 |
对应服务 |
TCP |
Inbound |
6443* |
Kubernetes API server |
All |
TCP |
Inbound |
2379-2380 |
etcd server client API |
kube-apiserver, etcd |
TCP |
Inbound |
10250 |
kubelet API |
Self, Control plane |
TCP |
Inbound |
10251 |
kube-scheduler |
Self |
TCP |
Inbound |
10252 |
kube-controller-manager |
Self |
工作节点 Worker node(s)
所需端口如下
协议类型 |
绑定方式 |
端口区域 |
作用 |
对应服务 |
TCP |
Inbound |
10250 |
kubelet API |
Self, Control plane |
TCP |
Inbound |
30000-32767 |
NodePort Services† |
All |
注:
- 标记的端口是可以修改的,确保对应端口开放即可。
† 标记的端口是
NodePort
服务的默认端口范围。
关闭 Swap
使用如下命令单次禁用 Swap
取消 Swap
挂载
使用 #
号注释 Swap 所处行即可
配置 iptables
使用如下命令配置网络
1 2 3 4 5 6 7 8 9 10
| 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 net.ipv4.ip_forward = 1 EOF sudo sysctl --system
|
配置 Containerd
注:参照 Containerd 文档。
安装 kubeadm
,kubelet
,kubectl
命令
使用如下命令进行安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-\$basearch 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 exclude=kubelet kubeadm kubectl EOF
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
|
初始化控制节点
编写如下配置文件 kubeadm-config.yaml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| apiVersion: kubeadm.k8s.io/v1beta3 kind: InitConfiguration nodeRegistration: criSocket: "unix:///run/containerd/containerd.sock" localAPIEndpoint: advertiseAddress: "<hostOrIp>" bindPort: 6443 --- apiVersion: kubeadm.k8s.io/v1beta3 kind: ClusterConfiguration networking: serviceSubnet: "10.96.0.0/16" podSubnet: "10.244.0.0/24" dnsDomain: "cluster.local" kubernetesVersion: "<version>" controlPlaneEndpoint: "<hostOrIp>:6443" certificatesDir: "/etc/kubernetes/pki" imageRepository: "registry.aliyuncs.com/google_containers" clusterName: "demo-cluster" --- apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd
|
使用如下命令拉取镜像并启动服务:
1 2
| kubeadm config images pull --config kubeadm-config.yaml kubeadm init --config kubeadm-config.yaml -v 5
|
注:如果遇到问题,可以根据命令提示进行修复,并使用 kubeadm reset -f --cri-socket unix:///run/containerd/containerd.sock
移除之前的配置。
用户配置
root 用户配置
1 2 3 4 5
| cat <<EOF | sudo tee /etc/profile.d/k8s.sh export KUBECONFIG=/etc/kubernetes/admin.conf EOF chmod a+x /etc/profile.d/k8s.sh source /etc/profile.d/k8s.sh
|
普通用户配置
1 2 3
| mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
|
(可选) 在主机上运行除集群管理外的其他服务
1
| kubectl taint nodes --all node-role.kubernetes.io/control-plane-
|
加入集群
- 如果原先 token 过期需要刷新 token,(默认一天)
- 如果没有
discovery-token-ca-cert-hash
可以使用如下命令生成
1 2
| openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | \ openssl dgst -sha256 -hex | sed 's/^.* //'
|
注: kubeadm init
命令会在命令行中输出加入集群的命令具体结构如下:
kubeadm join <host>:<port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
部署网络插件
1
| kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
|
检查集群
使用如下命令检查 Kubernetes 节点列表
1
| kubectl get nodes --all-namespaces
|
使用如下命令检查 Kubernetes 集群中运行的所有的 Pod
1
| kubectl get pods --all-namespaces
|
证书续期
集群的默认证书只有一年,可以使用如下命令检测过期时长:
1
| kubeadm certs check-expiration
|
如果有 RESIDUAL TIME
项异常则可以使用此命令进行续期:
1
| kubeadm certs renew <CERTIFICATE>
|
参考资料
官方文档
安装文档