公告

特别推出京东优惠挖掘小程序 [点击这里,扫码收藏] 专门收集京东今日特价爆品,商家漏洞等,拼手速,手慢无! 新增优惠: 1,美团外卖红包:扫码至少节省3元,全国可用,用完还能领。 2,车主加油打折服务:一键导航到加油站,选择油枪,支付时直减。 3,电影票购买返利,覆盖所有主流院线。

#1 2021-10-13 10:55:28

laxinadmin
京东团队长
注册时间: 2019-09-27
帖子: 21

阿里云centos8.2 执行 k8s 安装

K8S搭建手册
部署环境
准备开始

- 一台兼容的 Linux 主机。Kubernetes 项目为基于 Debian 和 Red Hat 的 Linux 发行版以及一些不提供包管理器的发行版提供通用的指令
- 每台机器 2 GB 或更多的 RAM (如果少于这个数字将会影响你应用的运行内存)
- 2 CPU 核或更多
- 集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
- 节点之中不可以有重复的主机名、MAC 地址或 product_uuid。请参见这里了解更多详细信息。
- 开启机器上的某些端口。请参见这里 了解更多详细信息。
- 禁用交换分区。为了保证 kubelet 正常工作,你 必须 禁用交换分区。
确保每个节点上 MAC 地址和 product_uuid 的唯一性 
- 你可以使用命令 ip link 或 ifconfig -a 来获取网络接口的 MAC 地址
- 可以使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验
一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复。 Kubernetes 使用这些值来唯一确定集群中的节点。 如果这些值在每个节点上不唯一,可能会导致安装 失败。

OS
Description:        CentOS Linux release 8.4.2105
Release:        8.4.2105



- 4台机器,并需要统一host文件
172.16.16.184   k8s001-master  k8s001-master       
172.16.16.193   k8s001-node    k8s001-node
172.16.16.185   k8s002-node    k8s002-node       
172.16.16.186   k8s003-node    k8s003-node

允许 iptables 检查桥接流量
确保 br_netfilter 模块被加载。这一操作可以通过运行 lsmod | grep br_netfilter 来完成。若要显式加载该模块,可执行 sudo modprobe br_netfilter。
为了让你的 Linux 节点上的 iptables 能够正确地查看桥接流量,你需要确保在你的 sysctl 配置中将 net.bridge.bridge-nf-call-iptables 设置为 1。例如:
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

doker安装
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
 
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker

配置 cgroup 驱动程序
容器运行时和 kubelet 都具有名字为 "cgroup driver" 的属性,该属性对于在 Linux 机器上管理 CGroups 而言非常重要。
警告:
你需要确保容器运行时和 kubelet 所使用的是相同的 cgroup 驱动,否则 kubelet 进程会失败。
相关细节可参见配置 cgroup 驱动。

sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2"
}
EOF


yum repo准备
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/y … ge-key.gpg
EOF

安装kubelet
setenforce 0
yum install -y kubelet kubeadm kubectl
systemctl enable kubelet && systemctl start kubelet


下载镜像
在master上执行
#!/bin/bash
url=registry.cn-hangzhou.aliyuncs.com/google_containers
version=v1.22.2
images=(kubeadm config images list --kubernetes-version=$version|awk -F '/' '{print $2}')
for imagename in ${images[@]} ; do
docker pull $url/$imagename
docker tag $url/$imagename k8s.gcr.io/$imagename
docker rmi -f $url/$imagename


k8s初始化
Kubeadm config print init-defaults > kubeadmin-config.yaml
Kubeadm init --config=kubeadmin-config.yaml

flannel初始化
wget https://github.com/coreos/flannel/raw/m … lannel.yml
kubectl apply -f kube-flannel.yml

Dashborad
kubectl apply -f https://raw.githubusercontent.com/kuber … ended.yaml

node加入集群
在master节点查看集群的token值
kubeadm token create --print-join-command

然后在各个node执行

查看集群状态
kubectl get cs
Kubectl get nodes
Kubectl get pod -A


官网参考
https://kubernetes.io/zh/docs/setup/pro … l-kubeadm/

离线

#2 2021-10-15 12:04:32

laxinadmin
京东团队长
注册时间: 2019-09-27
帖子: 21

Re: 阿里云centos8.2 执行 k8s 安装

FAQ关键点
1,公有云上部署k8s 可能出现分属于不同node的pod之间相互访问网络不通
参考: AliCloud VPC Backend for Flannel
https://github.com/flannel-io/flannel/b … backend.md
2,执行错误
E1009 14:18:41.052400 1 main.go:241] Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-amd64-x7b4s': pods "kube-flannel-ds-amd64-x7b4s" is forbidden: User "system:serviceaccount:kube-system:flannel" cannot get resource "pods" in API group "" in the namespace "kube-system"
- 权限修复
kubectl create clusterrolebinding gitlab-cluster-admin --clusterrole=cluster-admin --group=system:serviceaccounts --namespace=kube-system
3,linux内核版本
应高于4.0,建议最新
4,域名解析失败
检查安全规则,tcp,udp 的53端口都允许

kubeadmin init config

kubeadm config print init-defaults > kubeadmin-config.yaml

kubeadm init --config=kubeadmin-config.yaml


apiVersion: kubeadm.k8s.io/v1beta3
bootstrapTokens:
- groups:
  - system:bootstrappers:kubeadm:default-node-token
  token: abcdef.0123456789abcdef
  ttl: 24h0m0s
  usages:
  - signing
  - authentication
kind: InitConfiguration
localAPIEndpoint:
  advertiseAddress: 172.16.16.184
  bindPort: 6443
nodeRegistration:
  criSocket: /var/run/dockershim.sock
  imagePullPolicy: IfNotPresent
  name: node
  taints: null
---
apiServer:
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: 1.22.2
networking:
  dnsDomain: cluster.local
  podSubnet: 10.244.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}
若启用ipvs,需要增加
kubeProxy:
  config:
    mode: ipvs

FAQ

flannel

E1009 14:18:41.052400       1 main.go:241] Failed to create SubnetManager: error retrieving pod spec for 'kube-system/kube-flannel-ds-amd64-x7b4s': pods "kube-flannel-ds-amd64-x7b4s" is forbidden: User "system:serviceaccount:kube-system:flannel" cannot get resource "pods" in API group "" in the namespace "kube-system"

权限修复

kubectl create clusterrolebinding gitlab-cluster-admin --clusterrole=cluster-admin --group=system:serviceaccounts --namespace=kube-system

dashboard CrashLoopBackOff


手工pull dashboard image
dashboard 安装到 master

    kubectl drain xxxx-node --force --ignore-daemonsets --delete-local-data
    剔除所有node,则可

    然后重新加入集群
    kubectl uncordon xxx-node

pod访问外网不通

iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

阿里云上可能出现不同node之间的Pod访问不通

参考: AliCloud VPC Backend for Flannel
https://github.com/flannel-io/flannel/b … backend.md

登录bashboard
获取tocken
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')


最后测试k8s

写一个nginx pod yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 4
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: bitnami/wordpress-nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80

修改replica值,执行扩缩容
kubectl apply -f nginx.yaml

观察效果
kubectl get pod -A -o wide|grep nginx

离线

页脚

Powered by 华新企财帮

京ICP备19031397号-1