<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>如你所愿</title><link>https://www.loveyouso.wang/</link><description>随心而动，随刃而行</description><item><title>Windows11右键菜单改为Win10模式的方法</title><link>https://www.loveyouso.wang/?id=8</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;使用管理员身份运行命令行终端&lt;br&gt;依次执行下面的三个命令&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;reg.exe add &quot;HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32&quot; /f /ve
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;taskkill /f /im explorer.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;start explorer.exe
&lt;/code&gt;&lt;/pre&gt;
&lt;/body&gt;</description><pubDate>Sat, 01 Apr 2023 13:45:35 +0800</pubDate></item><item><title>KubeSphere搭建</title><link>https://www.loveyouso.wang/?id=4</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h1 id=&quot;h1-kubershpere-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;kubershpere集群搭建&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;kubershpere集群搭建&lt;/h1&gt;&lt;h2 id=&quot;h2-1-docker&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1、安装docker&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1、安装docker&lt;/h2&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo yum remove docker*
sudo yum install -y yum-utils
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-1-1-docker-yum-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1.1配置docker的yum地址&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1.1配置docker的yum地址&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-1-2-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1.2安装指定版本&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1.2安装指定版本&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-1-3-amp-docker&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1.3启动&amp;amp;开机启动docker&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1.3启动&amp;amp;开机启动docker&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;systemctl enable docker --now
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-1-4docker-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;1.4docker加速配置&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1.4docker加速配置&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json &amp;lt;&amp;lt;-'EOF'
{
  &quot;registry-mirrors&quot;: [&quot;https://1hjn6e4i.mirror.aliyuncs.com&quot;],
  &quot;exec-opts&quot;: [&quot;native.cgroupdriver=systemd&quot;],
  &quot;log-driver&quot;: &quot;json-file&quot;,
  &quot;log-opts&quot;: {
    &quot;max-size&quot;: &quot;100m&quot;
  },
  &quot;storage-driver&quot;: &quot;overlay2&quot;
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-2-kubernetes&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;2、安装Kubernetes&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2、安装Kubernetes&lt;/h2&gt;&lt;h3 id=&quot;h3-2-1-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;2.1、基本环境&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2.1、基本环境&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;每个机器使用内网ip互通&lt;/li&gt;&lt;li&gt;每个机器配置自己的hostname，不能用localhost&lt;/li&gt;&lt;li&gt;设置每个机器自己的hostname&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;hostnamectl set-hostname xxx
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3--selinux-permissive-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;将 SELinux 设置为 permissive 模式（相当于将其禁用）&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;将 SELinux 设置为 permissive 模式（相当于将其禁用）&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3--swap&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;关闭swap&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;关闭swap&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;swapoff -a
sed -ri 's/.*swap.*/#&amp;amp;/' /etc/fstab
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3--iptables-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;允许 iptables 检查桥接流量&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;允许 iptables 检查桥接流量&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;cat &amp;lt;&amp;lt;EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;sudo sysctl --system
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-2-2-kubelet-kubeadm-kubectl&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;2.2、安装kubelet、kubeadm、kubectl&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2.2、安装kubelet、kubeadm、kubectl&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;#配置k8s的yum源地址
cat &amp;lt;&amp;lt;EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
   http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

#安装 kubelet，kubeadm，kubectl
sudo yum install -y kubelet-1.22.2 kubeadm-1.22.2 kubectl-1.22.2

#启动kubelet
sudo systemctl enable --now kubelet

#所有机器配置master域名
echo &quot;192.168.10.111  k8s-master&quot; &amp;gt;&amp;gt; /etc/hosts
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-3-master-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3、初始化 master节点&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3、初始化 master节点&lt;/h2&gt;&lt;h3 id=&quot;h3-3-1-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3.1 初始化&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.1 初始化&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubeadm init \
--apiserver-advertise-address=192.168.10.111 \
--control-plane-endpoint=k8s-master \
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
--kubernetes-version v1.22.2 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/24
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-2-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3.2 记录初始化信息&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.2 记录初始化信息&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;！！！初始化操作后显示的日志！！！&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run &quot;kubectl apply -f [podnetwork].yaml&quot; with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:

  kubeadm join k8s-master:6443 --token ppplzy.23ubx9pt4heue8l2 \
 --discovery-token-ca-cert-hash sha256:8866cdecf9719d4757e02449ef81229a61bb60d8eba4c8d4de62998e1019d7ed \
 --control-plane

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join k8s-master:6443 --token ppplzy.23ubx9pt4heue8l2 \
 --discovery-token-ca-cert-hash sha256:8866cdecf9719d4757e02449ef81229a61bb60d8eba4c8d4de62998e1019d7ed 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-3-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3.3 主节点执行命令&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.3 主节点执行命令&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-4-calico-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3.4 主节点安装Calico网络插件&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.4 主节点安装Calico网络插件&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;curl https://docs.projectcalico.org/v3.8/manifests/calico.yaml -O

kubectl apply -f calico.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-3-5-master-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;3.5 工作节点加入master节点&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3.5 工作节点加入master节点&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubeadm join hadoop101:6443 --token 2ch31h.qblfk0q4dzcntudk \
    --discovery-token-ca-cert-hash sha256:6661249b0ff68bbbe03693815da1fa0a8ec81408e97926f0597d59de5ba740a4
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-4-kubesphere-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4、安装KubeSphere前置环境&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4、安装KubeSphere前置环境&lt;/h2&gt;&lt;h3 id=&quot;h3-4-1-nfs-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4.1、nfs文件系统&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.1、nfs文件系统&lt;/h3&gt;&lt;h3 id=&quot;h3-4-1-1-nfs-server&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4.1.1 安装nfs-server&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.1.1 安装nfs-server&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 在每个机器。
yum install -y nfs-utils


# 在master 执行以下命令 
echo &quot;/nfs/data/ *(insecure,rw,sync,no_root_squash)&quot; &amp;gt; /etc/exports
# 执行以下命令，启动 nfs 服务;创建共享目录
mkdir -p /nfs/data
# 在master执行
systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server
# 使配置生效
exportfs -r
#检查配置是否生效
exportfs
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-4-1-2-work-nfs-client&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4.1.2 work节点配置nfs-client&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.1.2 work节点配置nfs-client&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;showmount -e 192.168.10.111

mkdir -p /nfs/data

mount -t nfs 192.168.10.111:/nfs/data /nfs/data
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-4-1-3-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4.1.3 主节点配置默认存储&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.1.3 主节点配置默认存储&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;编写一个StorageClass.yaml&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;## 创建了一个存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-storage
  annotations:
    storageclass.kubernetes.io/is-default-class: &quot;true&quot;
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner
parameters:
  archiveOnDelete: &quot;true&quot;  ## 删除pv的时候，pv的内容是否要备份

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-client-provisioner
  labels:
    app: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
spec:
  replicas: 1
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: nfs-client-provisioner
  template:
    metadata:
      labels:
        app: nfs-client-provisioner
    spec:
      serviceAccountName: nfs-client-provisioner
      containers:
        - name: nfs-client-provisioner
          image: registry.cn-beijing.aliyuncs.com/kubesphereio/nfs-subdir-external-provisioner:v4.0.2
          # resources:
          #    limits:
          #      cpu: 10m
          #    requests:
          #      cpu: 10m
          volumeMounts:
            - name: nfs-client-root
              mountPath: /persistentvolumes
          env:
            - name: PROVISIONER_NAME
              value: k8s-sigs.io/nfs-subdir-external-provisioner
            - name: NFS_SERVER
              value: 192.168.10.111 ## 指定自己nfs服务器地址
            - name: NFS_PATH  
              value: /nfs/data  ## nfs服务器共享的目录
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.10.111
            path: /nfs/data
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [&quot;&quot;]
    resources: [&quot;nodes&quot;]
    verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
  - apiGroups: [&quot;&quot;]
    resources: [&quot;persistentvolumes&quot;]
    verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;create&quot;, &quot;delete&quot;]
  - apiGroups: [&quot;&quot;]
    resources: [&quot;persistentvolumeclaims&quot;]
    verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;update&quot;]
  - apiGroups: [&quot;storage.k8s.io&quot;]
    resources: [&quot;storageclasses&quot;]
    verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;]
  - apiGroups: [&quot;&quot;]
    resources: [&quot;events&quot;]
    verbs: [&quot;create&quot;, &quot;update&quot;, &quot;patch&quot;]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
rules:
  - apiGroups: [&quot;&quot;]
    resources: [&quot;endpoints&quot;]
    verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;create&quot;, &quot;update&quot;, &quot;patch&quot;]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;进行安装&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubectl apply -f StorageClass.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-4-2-metrics-server&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;4.2 安装metrics-server&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4.2 安装metrics-server&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;安装集群指标监控组件，编写一个metrics.yaml&lt;/li&gt;&lt;/ul&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
    rbac.authorization.k8s.io/aggregate-to-admin: &quot;true&quot;
    rbac.authorization.k8s.io/aggregate-to-edit: &quot;true&quot;
    rbac.authorization.k8s.io/aggregate-to-view: &quot;true&quot;
  name: system:aggregated-metrics-reader
rules:
- apiGroups:
  - metrics.k8s.io
  resources:
  - pods
  - nodes
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
rules:
- apiGroups:
  - &quot;&quot;
  resources:
  - pods
  - nodes
  - nodes/stats
  - namespaces
  - configmaps
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server-auth-reader
  namespace: kube-system
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: extension-apiserver-authentication-reader
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server:system:auth-delegator
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  labels:
    k8s-app: metrics-server
  name: system:metrics-server
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:metrics-server
subjects:
- kind: ServiceAccount
  name: metrics-server
  namespace: kube-system
---
apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  ports:
  - name: https
    port: 443
    protocol: TCP
    targetPort: https
  selector:
    k8s-app: metrics-server
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: metrics-server
  name: metrics-server
  namespace: kube-system
spec:
  selector:
    matchLabels:
      k8s-app: metrics-server
  strategy:
    rollingUpdate:
      maxUnavailable: 0
  template:
    metadata:
      labels:
        k8s-app: metrics-server
    spec:
      containers:
      - args:
        - --cert-dir=/tmp
        - --kubelet-insecure-tls
        - --secure-port=4443
        - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
        - --kubelet-use-node-status-port
        image: registry.cn-beijing.aliyuncs.com/kubesphereio/metrics-server:v0.4.2
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          httpGet:
            path: /livez
            port: https
            scheme: HTTPS
          periodSeconds: 10
        name: metrics-server
        ports:
        - containerPort: 4443
          name: https
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /readyz
            port: https
            scheme: HTTPS
          periodSeconds: 10
        securityContext:
          readOnlyRootFilesystem: true
          runAsNonRoot: true
          runAsUser: 1000
        volumeMounts:
        - mountPath: /tmp
          name: tmp-dir
      nodeSelector:
        kubernetes.io/os: linux
      priorityClassName: system-cluster-critical
      serviceAccountName: metrics-server
      volumes:
      - emptyDir: {}
        name: tmp-dir
---
apiVersion: apiregistration.k8s.io/v1
kind: APIService
metadata:
  labels:
    k8s-app: metrics-server
  name: v1beta1.metrics.k8s.io
spec:
  group: metrics.k8s.io
  groupPriorityMinimum: 100
  insecureSkipTLSVerify: true
  service:
    name: metrics-server
    namespace: kube-system
  version: v1beta1
  versionPriority: 100
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-5-kubesphere&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5.安装KubeSphere&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.安装KubeSphere&lt;/h2&gt;&lt;blockquote&gt;
&lt;p&gt;KubeSphere官网 &lt;a href=&quot;https://kubesphere.com.cn/&quot;&gt;https://kubesphere.com.cn/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;h3-5-1-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5.1.下载核心文件&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.1.下载核心文件&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;wget https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/kubesphere-installer.yaml

wget https://github.com/kubesphere/ks-installer/releases/download/v3.1.1/cluster-configuration.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-5-2-cluster-configuration&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5.2.修改cluster-configuration&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.2.修改cluster-configuration&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;在 cluster-configuration.yaml中指定我们需要开启的功能&lt;br&gt;参照官网“启用可插拔组件”&lt;br&gt;&lt;a href=&quot;https://kubesphere.com.cn/docs/pluggable-components/overview/&quot;&gt;https://kubesphere.com.cn/docs/pluggable-components/overview/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;h3-5-3-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5.3.执行安装&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.3.执行安装&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubectl apply -f kubesphere-installer.yaml
kubectl apply -f cluster-configuration.yaml
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3-5-4-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;5.4、查看安装进度&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5.4、查看安装进度&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;访问任意机器的 30880端口 账号 ：admin     密码 ：P&lt;a class=&quot;at-link&quot; title=&quot;@88w0rd&quot; href=&quot;https://github.com/88w0rd&quot;&gt;@88w0rd&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;可能会遇到etcd监控证书找不到的问题。解决etcd监控证书找不到问题↓↓↓&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs --from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt  --from-file=etcd-client.crt=/etc/kubernetes/pki/apiserver-etcd-client.crt --from-file=etcd-client.key=/etc/kubernetes/pki/apiserver-etcd-client.key
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;h2-6-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;6、排错工具&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6、排错工具&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;journalctl -xefu kubelet 查看kubelet日志&lt;/li&gt;&lt;li&gt;kubectl logs pod pod名字 查看pod日志&lt;/li&gt;&lt;li&gt;kubectl describe -n 名称空间 pod名字 详细查看pod日志&lt;/li&gt;&lt;/ul&gt;
&lt;/body&gt;</description><pubDate>Thu, 17 Mar 2022 22:10:28 +0800</pubDate></item><item><title>java的jar包启动脚本</title><link>https://www.loveyouso.wang/?id=6</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;h3 id=&quot;h3--jar-debug-&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;一、常用启动jar脚本，带debug模式。&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、常用启动jar脚本，带debug模式。&lt;/h3&gt;&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;#!/bin/sh
# author name：ubox

#	$0 是文件名
#	$1 是第一个参数

# echo $0 start 是启动服务
# echo $0 stop 是停止服务
# echo $0 restart 是重启服务
# echo $0 status 是查看服务状态
# echo $0 debug 是debug模式启动服务

# 指定JAR包文件夹，将来运行的时候，此文件需要与jar包同级
AppName=ubox-api-web.jar

# JVM参数
JVM_OPTS=&quot;-Dname=$AppName -Dspring.profiles.active=prod -Dserver.port=9080 -Duser.timezone=Asia/Shanghai -Xms1024M -Xmx024M -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC&quot;
# -Dspring.profiles.active=pro 指的是激活application-pro.properties配置文件
# -Dserver.port=18083 可指定运行端口

# 此变量会获取到当前路径 等价于 Linux的pwd命令
APP_HOME=`pwd`

# 日志路径 一定要有此路经的文件夹，没有此路径的文件夹，将不会有日志文件：$AppName.log，记得创建logs文件夹。
LOG_PATH=$APP_HOME/logs/$AppName.log

# 获取第一个参数 如果为空，将会提示这个
if [ &quot;$1&quot; = &quot;&quot; ];
then
    echo -e &quot;\033[0;31m 未输入操作名 \033[0m  \033[0;34m {start|stop|restart|status} \033[0m&quot;
    exit 1
fi

# 如果没有指定JAR包，将会提示这个
if [ &quot;$AppName&quot; = &quot;&quot; ];
then
    echo -e &quot;\033[0;31m 未输入应用名 \033[0m&quot;
    exit 1
fi

# start方法
function start()
{
    # 获取PID，最后打印出结果$2 就是PID 注意，此处$2不是我们运行此脚本的第二个参数($0 不算做第一个参数)！
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

    if [ x&quot;$PID&quot; != x&quot;&quot; ]; then
        echo &quot;$AppName is running...&quot;
    else
        nohup java -jar  $JVM_OPTS $AppName &amp;gt; $LOG_PATH 2&amp;gt;&amp;amp;1 &amp;amp;
        # 下面可以查看一下命令对不对 
        #echo	&quot;nohup java -jar  $JVM_OPTS $AppName &amp;gt; $LOG_PATH 2&amp;gt;&amp;amp;1 &amp;amp;&quot;
        echo &quot;Start $AppName success...&quot;
    fi
}

# stop方法
function stop()
{
    echo &quot;Stop $AppName&quot;
    
    PID=&quot;&quot;
    # 定制查询服务PID的方法
    query(){
        PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`
    }
    # 第一次查询状态，更变PID
    query
    
    if [ x&quot;$PID&quot; != x&quot;&quot; ]; then
        kill -TERM $PID
        echo &quot;$AppName (pid:$PID) exiting...&quot;
        while [ x&quot;$PID&quot; != x&quot;&quot; ]
        do
            # 间隔1秒执行后续代码
            sleep 1
            # 这是一个死循环，检查每一次PID，都会更变PID的最新结果，如果PID等于空了，就结束循环，输出结束
            query
        done
        echo &quot;$AppName exited.&quot;
    else
        echo &quot;$AppName already stopped.&quot;
    fi
}

# restart方法 注意方法内部的内容：调用了2个别的方法，所以从脚本加载从上倒下的顺序上，这2个被调用的方法，都要在此方法之前！
function restart()
{	
    # 先停止服务，然后等待2秒后，再次重启服务，不过2秒时间太短，建议久一点
    stop
    sleep 2
    start
}

# status方法
function status()
{
    # 获取PID
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|wc -l`
    
    # 如果PID为0，代表服务器停止，不为0，就代表服务器正在运行
    if [ $PID != 0 ];then
        echo &quot;$AppName is running...&quot;
    else
        echo &quot;$AppName is not running...&quot;
    fi
}

# start方法
function debug()
{
    # 获取PID，最后打印出结果$2 就是PID 注意，此处$2不是我们运行此脚本的第二个参数($0 不算做第一个参数)！
    PID=`ps -ef |grep java|grep $AppName|grep -v grep|awk '{print $2}'`

    if [ x&quot;$PID&quot; != x&quot;&quot; ]; then
        echo &quot;$AppName is running...&quot;
    else
        nohup java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5006 -jar $JVM_OPTS $AppName &amp;gt; $LOG_PATH 2&amp;gt;&amp;amp;1 &amp;amp;
        # 下面可以查看一下命令对不对 
        #echo	&quot;nohup java -jar  $JVM_OPTS $AppName &amp;gt; $LOG_PATH 2&amp;gt;&amp;amp;1 &amp;amp;&quot;
        echo &quot;Start $AppName success...&quot;
    fi
}

# 获取第一个参数，执行不同的方法！
case $1 in
    start)
     # 执行start方法
        start
        ;;
    stop)
     # 执行stop方法
        stop
        ;;
    restart)
     # 执行resrart方法
        restart
        ;;
    status)
     # 执行status方法
        status
        ;;
    debug)
     # 执行debug方法
        debug
        ;;
    *)
# case的结束标志
esac
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;h3--&quot;&gt;&lt;a class=&quot;reference-link&quot; name=&quot;二、注意：&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、注意：&lt;/h3&gt;&lt;p&gt;JAVA远程调试配置JDK8和JDK11/JDK17是不一样的。&lt;/p&gt;
&lt;p&gt;在jdk8，使用远程调试这样就可以了&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;对于jdk 11/17，您应该使用下面的参数代替&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;-agentlib:jdwp=transport=dt_socket,address=*:8787,server=y,suspend=n
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;原因是根据此答案，Java 9更改了默认行为：从Java 9开始，除非另有说明，否则JVM仅接受本地连接。&lt;/p&gt;
&lt;p&gt;因此，解决方案相当简单：&lt;/p&gt;
&lt;p&gt;需要将 &lt;strong&gt;address=8787&lt;/strong&gt; 更改为 &lt;strong&gt;–debug *:8787&lt;/strong&gt;&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Sat, 01 May 2021 16:55:24 +0800</pubDate></item><item><title>Linux下命令行变成-bash-4.2出现原因以及解决方法</title><link>https://www.loveyouso.wang/?id=5</link><description>&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;出现原因：&lt;/p&gt;
&lt;p&gt;基本上是因为删除了  .bash_profile 这个隐藏文件或者改了这个.bash_profile 中的配置导致的&lt;/p&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;vi ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在文件最后加上&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;export PS1='[\u@\h \W]\$'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;source   ~/.bash_profile
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;就可以了&lt;/p&gt;
&lt;/body&gt;</description><pubDate>Sat, 30 Nov 2019 13:50:13 +0800</pubDate></item><item><title>Markdwon语法</title><link>https://www.loveyouso.wang/?id=3</link><description>&lt;h1 id=&quot;h1-u4E00u7EA7u6807u9898&quot;&gt;&lt;a name=&quot;一级标题&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一级标题&lt;/h1&gt;&lt;h2 id=&quot;h2-u4E8Cu7EA7u6807u9898&quot;&gt;&lt;a name=&quot;二级标题&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二级标题&lt;/h2&gt;&lt;h3 id=&quot;h3-u4E09u7EA7u6807u9898&quot;&gt;&lt;a name=&quot;三级标题&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三级标题&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;块区间写点什么呢
这是一个过程&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;ul&gt;
&lt;li&gt;这是列表&lt;/li&gt;&lt;li&gt;这是列表&lt;/li&gt;&lt;li&gt;这是列表&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;这是区块&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第一项&lt;/li&gt;&lt;li&gt;第二项&lt;blockquote&gt;
&lt;p&gt;内层区块&lt;br&gt;第三层区块&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code class=&quot;language-java&quot;&gt;public static void main(String[] args){
    System.out.print(&amp;quot;hello world&amp;quot;);
}&lt;/code&gt;&lt;/pre&gt;
</description><pubDate>Mon, 15 Oct 2018 20:05:13 +0800</pubDate></item></channel></rss>