创建提供给有状态服务的卷
mkdir -p /nfs{1,2,3}
共享nfs1、2、3文件目录
cat < /etc/exports
/nfs1 172.17.67.0/24(rw,no_root_squash,async)
/nfs2 172.17.67.0/24(rw,no_root_squash,async)
/nfs3 172.17.67.0/24(rw,no_root_squash,async)
EOF
NAS挂载参数详解
星号* 任意主机可以使用NFS服务
rw:可读写的权限
ro:只读的权限
anonuid:可以自行设定这个UID的值,这个UID必需要存在于你的/etc/passwd当中
anongid:同anonuid,但是变成groupID就是了
sync:资料同步写入到内存与硬盘当中
async:资料会先暂存于内存当中,而非直接写入硬盘
insecure:允许从这台机器过来的非授权访问
no_root_squash:登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数『极不安全』,不建议使用
root_squash:登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
all_squash:不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody

重新加载nfs共享文件
exportfs -arv
启动nas服务
service nfs start

创建PV存储卷
vim zkpv.yaml
apiVersion: v1
kind: PersistentVolume #设置控制器为PV
metadata:
name: nfsv1 #定义pv名称
labels:
name: nfsv1
spec:
nfs: #定义存储类型为nfs
path: /nfs1 #nfs共享路径
server: 192.168.11.128 #nfs共享服务service
storageClassName: nfs #存储类名
persistentVolumeReclaimPolicy: Retain #卷的策略(保留)
accessModes: #访问模式

  • ReadWriteOnce #该卷可以通过单个节点以读写方式安装
    capacity: #容量
    storage: 15Gi #存储大小

    apiVersion: v1
    kind: PersistentVolume #设置控制器为PV
    metadata:
    name: nfsv2 #定义pv名称
    labels:
    name: nfsv2
    spec:
    nfs: #定义存储类型为nfs
    path: /nfs2 #nfs共享路径
    server: 192.168.11.128 #nfs共享服务service
    storageClassName: nfs #存储类名
    persistentVolumeReclaimPolicy: Retain #卷的策略(保留)
    accessModes: #访问模式

  • ReadWriteOnce #该卷可以通过单个节点以读写方式安装
    capacity: #容量
    storage: 15Gi #存储大小

    apiVersion: v1
    kind: PersistentVolume #设置控制器为PV
    metadata:
    name: nfsv3 #定义pv名称
    labels:
    name: nfsv3
    spec:
    nfs: #定义存储类型为nfs
    path: /nfs3 #nfs共享路径
    server: 192.168.11.128 #nfs共享服务service
    storageClassName: nfs #存储类名
    persistentVolumeReclaimPolicy: Retain #卷的策略(保留)
    accessModes: #访问模式

  • ReadWriteOnce #该卷可以通过单个节点以读写方式安装
    capacity: #容量
    storage: 15Gi #存储大小

zookeeper部署
vim zookeeper.yaml
apiVersion: v1
kind: Service
metadata:
name: zk-hs
labels:
app: zk
spec:
ports:

  • port: 2888
    name: server
  • port: 3888
    name: leader-election
    clusterIP: None
    selector:
    app: zk

    apiVersion: v1
    kind: Service
    metadata:
    name: zk-cs
    labels:
    app: zk
    spec:
    ports:

  • port: 2181
    name: client
    selector:
    app: zk

    apiVersion: policy/v1beta1
    kind: PodDisruptionBudget
    metadata:
    name: zk-pdb
    spec:
    selector:
    matchLabels:
    app: zk
    maxUnavailable: 1

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
    name: zk
    spec:
    selector:
    matchLabels:
    app: zk
    serviceName: zk-hs
    replicas: 3
    updateStrategy:
    type: RollingUpdate
    podManagementPolicy: OrderedReady #OrderedReady顺序创建及逆序删除Pod,Parallel同时创建删除Pod(sfs.spec.podManagementPolicy)
    template:
    metadata:
    labels:
    app: zk
    spec:

    terminationGracePeriodSeconds: 10

    affinity:
    podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:

    • labelSelector:
      matchExpressions:

      • key: "app"
        operator: In
        values:

        • zk
          topologyKey: "kubernetes.io/hostname"
          containers:

          • name: kubernetes-zookeeper
            imagePullPolicy: Always
            image: "mirrorgooglecontainers/kubernetes-zookeeper:1.0-3.4.10"
            resources:
            requests:
            memory: "1Gi"
            cpu: "0.5"
            ports:
          • containerPort: 2181
            name: client
          • containerPort: 2888
            name: server
          • containerPort: 3888
            name: leader-election
            command:
          • sh
          • -c
          • "start-zookeeper \
            --servers=3 \
            --data_dir=/var/lib/zookeeper/data \
            --data_log_dir=/var/lib/zookeeper/data/log \
            --conf_dir=/opt/zookeeper/conf \
            --client_port=2181 \
            --election_port=3888 \
            --server_port=2888 \
            --tick_time=2000 \
            --init_limit=10 \
            --sync_limit=5 \
            --heap=512M \
            --max_client_cnxns=60 \
            --snap_retain_count=3 \
            --purge_interval=12 \
            --max_session_timeout=40000 \
            --min_session_timeout=4000 \
            --log_level=INFO"
            readinessProbe:
            exec:
            command:
    • sh
    • -c
    • "zookeeper-ready 2181"
      initialDelaySeconds: 10
      timeoutSeconds: 5
      livenessProbe:
      exec:
      command:
    • sh
    • -c
    • "zookeeper-ready 2181"
      initialDelaySeconds: 10
      timeoutSeconds: 5
      volumeMounts:

      • name: data
        mountPath: /var/lib/zookeeper
        securityContext: #限制不可信容器的行为,保护系统和其他容器不受其影响
        runAsUser: 1000 #user ID
        fsGroup: 1000 #volume FSGroup
        volumeClaimTemplates:
  • metadata:
    name: data
    spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: "nfs"
    resources:
    requests:
    storage: 2Gi
    提交YAML文件并查看运行情况
    kubectl apply -f zookeeper.yaml && kubectl get pod -o wide -w
    验证:待续
最后修改日期: 2021年3月18日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。