playbook部署flanneld 定义主机组 说明:
1、playbook的主机组必须要和playbook文件在同一个目录下否则会报如下错误: [root@test1 profile]# ansible-playbook -i hosts deploy_flanneld.yaml --list-hosts [WARNING]: Unable to parse /k8s/profile/hosts as an inventory source [WARNING]: No inventory was parsed, only implicit localhost is available [WARNING]: Could not match supplied host pattern, ignoring: all 2、执行playbook必须要在plyaybook的文件所在目录下执行,否则报错;跟带不带绝对路径没有关系,必须保证在同一个目录
cat >/k8s/profile/hosts <<EOF [k8s] 192.168.0.91 192.168.0.92 192.168.0.93 [test0] 192.168.0.92 192.168.0.93 [test1] 192.168.0.91 [test2] 192.168.0.92 [test3] 192.168.0.93 [test4] 192.168.0.94 EOF 说明:在playbook中定义了通过kubectl安装flanneld 本实例中定义了两个变量cluster_cidr="172.30.0.0/16" iface="ens33" 变量名称必须小写,对应模板文件中的"Network": "{{ cluster_cidr }}", iface={{ iface }} cat > /k8s/profile/deploy_flanneld.yaml <<EOF - hosts: test4 remote_user: root become: yes become_method: sudo vars: cluster_cidr: 172.30.0.0/16 iface: ens33 tasks: - name: copy flanneld config file template: src=/k8s/profile/kube-flannel.yml.j2 dest=/k8s/profile/kube-flannel.yml - name: install_flanneld command: kubectl apply -f /k8s/profile/kube-flannel.yml EOF 创建模板文件 mkdir -p /k8s/profile/ cat > /k8s/profile/kube-flannel.yml.j2 << EOF --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: flannel rules: - apiGroups: - "" resources: - pods verbs: - get - apiGroups: - "" resources: - nodes verbs: - list - watch - apiGroups: - "" resources: - nodes/status verbs: - patch --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1beta1 metadata: name: flannel roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: flannel subjects: - kind: ServiceAccount name: flannel namespace: kube-system --- apiVersion: v1 kind: ServiceAccount metadata: name: flannel namespace: kube-system --- kind: ConfigMap apiVersion: v1 metadata: name: kube-flannel-cfg namespace: kube-system labels: tier: node app: flannel data: cni-conf.json: | { "name": "cbr0", "plugins": [ { "type": "flannel", "delegate": { "hairpinMode": true, "isDefaultGateway": true } }, { "type": "portmap", "capabilities": { "portMappings": true } } ] } net-conf.json: | { "Network": "{{ cluster_cidr }}", "Backend": { "Type": "vxlan" } } --- apiVersion: extensions/v1beta1 kind: DaemonSet metadata: name: kube-flannel-ds namespace: kube-system labels: tier: node app: flannel spec: template: metadata: labels: tier: node app: flannel spec: hostNetwork: true nodeSelector: beta.kubernetes.io/arch: amd64 tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule serviceAccountName: flannel initContainers: - name: install-cni image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 command: - cp args: - -f - /etc/kube-flannel/cni-conf.json - /etc/cni/net.d/10-flannel.conflist volumeMounts: - name: cni mountPath: /etc/cni/net.d - name: flannel-cfg mountPath: /etc/kube-flannel/ containers: - name: kube-flannel image: registry.cn-shanghai.aliyuncs.com/gcr-k8s/flannel:v0.10.0-amd64 command: - /opt/bin/flanneld args: - --ip-masq - --kube-subnet-mgr - --iface={{ iface }} resources: requests: cpu: "100m" memory: "50Mi" limits: cpu: "100m" memory: "50Mi" securityContext: privileged: true env: - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace volumeMounts: - name: run mountPath: /run - name: flannel-cfg mountPath: /etc/kube-flannel/ volumes: - name: run hostPath: path: /run - name: cni hostPath: path: /etc/cni/net.d - name: flannel-cfg configMap: name: kube-flannel-cfg EOF 开始部署 ansible /k8s/profile/deploy_flanneld.yaml
原文:https://www.cnblogs.com/effortsing/p/10356256.html