Kubernetes 学习笔记---集群搭建

准备工作

配置host

cat >> /etc/hosts << EOF
192.168.116.57 k8s-master
192.168.116.58 k8s-worker01
192.168.116.59 k8s-worker02
EOF

禁用SELinux

# 临时
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

安装kubeadm kubectl kubelet

注意 所有节点都需要安装 docker kubectl kubelet kubeadm

在这里,我选择使用kubeadm来安装k8s集群
官方文档

安装运行时

我选择使用docker,原因是使用惯了 ^ _ ^
已经写过docker安装了,不在赘述,需要的参考下面这篇文章。
docker 安装
补充一点 修改一下cgroup

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",
  "registry-mirrors": ["https://wefdoe4x.mirror.aliyuncs.com"]
}
EOF
#重启docker
systemctl daemon-reload
systemctl restart docker

安装kubeadm kubelet kubectl

# 添加k8s源
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF

# 官方的不一定能拉到 换成阿里的
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装kubelet kubeadm kubectl
sudo yum install -y kubelet kubeadm  kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet # systemctl enable kubelet + systemctl start kubelet

初始化集群

方式一: 直接初始化(推荐)

出现错误看这里

网络插件看这里

注意:安装部署节点过程中,很有可以因为防火墙的原因,导致端口不通,所以为了方便测试安装,可以考虑关掉防火墙。

#初始化master 节点 只有master节点需要执行这个命令
kubeadm init
#漫长的等待 init完成后会有提示 跟着提示操作
export KUBECONFIG=/etc/kubernetes/admin.conf # 这样只是临时的 关闭session后再打开就不可以了
# 持久化
cat >> ~/.bash_profile <<EOF
export KUBECONFIG=/etc/kubernetes/admin.conf
EOF
source ~/.bash_profile

#查看节点状态
kubectl get nodes -A # 现在只有master一个节点 并且状态还是NotReady 
# 这个时候需要安装网络插件 网络插件有很多 我们这里选择 canal
# 我没有直接apply 而是选择先下载下来 方便以后使用
curl -O https://projectcalico.docs.tigera.io/manifests/canal.yaml
kubectl apply -f canal.yaml
# 安装完成后我们get node 就会发现状态从NotReady => Ready

# 查看 加入master节点的token
kubeadm token create --print-join-command

接下来的操作是在worker节点

安装docker kubeadm kubectl kubelet 不在赘述

# worker节点加入到master节点
kubeadm join 192.168.116.57:6443 --token xxxx   --discovery-token-ca-cert-hash sha256:xxx 
修改worker节点的角色
# 修改角色  master执行
kubectl label node <节点名称> node-role.kubernetes.io/worker=worker

安装dashboard

#安装dashboard
curl https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml -O
kubectl apply -y recommended.yaml

访问安装dashboard

官方文档

代理方式
kubectl proxy
# 访问
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
NodePort

编辑 kubernetes-dashboard service

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard

修改IP类型, type:ClusterIP ==> type: NodePort 然后保存退出

apiVersion: v1
...
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "343478"
  selfLink: /api/v1/namespaces/kubernetes-dashboard/services/kubernetes-dashboard
  uid: 8e48f478-993d-11e7-87e0-901b0e532516
spec:
  clusterIP: 10.100.124.90
  externalTrafficPolicy: Cluster
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP # 修改这里 ClusterIP ==> NodePort
status:
  loadBalancer: {}

获取服务端口

kebuctl get service  kubernetes-dashboard -n  kubernetes-dashboard

输出信息

NAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   NodePort   10.100.124.90   <nodes>       443:31707/TCP   21h

你可以看到Type变成了NodePort,并且Ports多了一个31707端口,这就是我们的nodePort。

如果你是单节点的服务,就可以直接使用https://master-ip:nodePort访问dashboard。

如果你不是单节点服务,你可以需要使用https://node-ip:nodePort访问dashboard。

这里的node-ip指的是运行kubernetes-dashboard服务的节点的IP,可以通过以下方式查看。

# 查看pod运行在那个节点
kubectl get pods -n kubernetes-dashboard -o wide
# 查看节点IP
kubectl get nodes -A -o wid

输出信息

# pod info:kubectl get pods -n kubernetes-dashboard -o wide
NAME                                         READY   STATUS    RESTARTS   AGE   IP          NODE           NOMINATED NODE   READINESS GATES
dashboard-metrics-scraper-799d786dbf-lgnx2   1/1     Running   0          73m   10.36.0.0   k8s-worker02   <none>           <none>
kubernetes-dashboard-fb8648fd9-wnpkt         1/1     Running   0          73m   10.32.0.3   k8s-worker01   <none>           <none>

# node info:kubectl get nodes -A -o wid
NAME           STATUS   ROLES                  AGE   VERSION   INTERNAL-IP      EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION          CONTAINER-RUNTIME
k8s-master     Ready    control-plane,master   18h   v1.23.6   192.168.116.57   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://20.10.14
k8s-worker01   Ready    worker                 18h   v1.23.6   192.168.116.58   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://20.10.14
k8s-worker02   Ready    worker                 18h   v1.23.6   192.168.116.59   <none>        CentOS Linux 7 (Core)   3.10.0-957.el7.x86_64   docker://20.10.14
获取token
# 创建用户
cat > xiaoming.sercrt.yaml << EOF
apiVersion: v1
kind: ServiceAccount
metadata:
  name: xiaoming
  namespace: kubernetes-dashboard
EOF
kubectl create -f xiaoming.sercrt.yaml

# 绑定角色
cat > dashboard.token.yaml << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: xiaoming
  namespace: kubernetes-dashboard
EOF
kubectl apply -f dashboard.token.yaml

# 查看创建好的secrets
kubectl -n kubernetes-dashboard get secrets
# 输出
xiaoming-token-rgvpr               kubernetes.io/service-account-token   3      109m
default-token-rjzg9                kubernetes.io/service-account-token   3      124m
kubernetes-dashboard-certs         Opaque                                0      124m
kubernetes-dashboard-csrf          Opaque                                1      124m
kubernetes-dashboard-key-holder    Opaque                                2      124m
# 查看token
kubectl describe secrets -n kubernetes-dashboard xiaoming-token-rgvpr
# 输出
Name:         zhousong-token-8z495
Namespace:    kubernetes-dashboard
Labels:       <none>
Annotations:  kubernetes.io/service-account.name: zhousong
              kubernetes.io/service-account.uid: ef844eb7-37bc-476e-9bd6-ac80eefa4a5b

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1099 bytes
namespace:  20 bytes
token:      <这里是很长的token,登录的时候复制这个就可以了>

其他命令

# 查看命名空间
kubectl get namespace -A
# 查看节点信息
kubectl get nodes
# 查看pod信息
kubectl get pod -A
# 查看描述信息
kubectl describe <resource tpye> <resource name> -n <namespace>
# 查看日志
kubectl logs [-f] [-p] POD [-c CONTAINER]
# 查看kubelet运行日志
journalctl -xe kubelet
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容