መጽሐፍ "Kubernetes ለ DevOps"

መጽሐፍ "Kubernetes ለ DevOps" ጤና ይስጥልኝ Habrites! ኩበርኔትስ ከዘመናዊው የደመና ስነ-ምህዳር ቁልፍ ነገሮች አንዱ ነው። ይህ ቴክኖሎጂ የኮንቴይነር ቨርቹዋልን አስተማማኝነት፣ መለካት እና የመቋቋም አቅምን ይሰጣል። John Arundel እና Justin Domingus ስለ ኩበርኔትስ ስነ-ምህዳር ይናገራሉ እና ለዕለት ተዕለት ችግሮች የተረጋገጡ መፍትሄዎችን ያስተዋውቃሉ። ደረጃ በደረጃ የእራስዎን የደመና-ተወላጅ መተግበሪያን ይገነባሉ እና እሱን ለመደገፍ መሠረተ ልማት ይፈጥራሉ ፣ የልማት አካባቢን ያዘጋጃሉ እና በሚከተሉት አፕሊኬሽኖች ላይ ሲሰሩ ጠቃሚ የሆነ ቀጣይነት ያለው የማሰማራት ቧንቧ መስመር።

• ከመሬት ተነስተው በመያዣዎች እና በኩበርኔትስ ይጀምሩ፡ ርዕሱን ለመማር ልዩ ልምድ አያስፈልግም። • የራስዎን ዘለላዎች ያሂዱ ወይም የሚተዳደር የኩበርኔትስ አገልግሎትን ከአማዞን፣ ከጉግል እና ከሌሎችም ይምረጡ • የመያዣ የህይወት ኡደትን እና የሃብት ፍጆታን ለመቆጣጠር Kubernetes ይጠቀሙ። • ስብስቦችን ለዋጋ፣ ለአፈጻጸም፣ ለአደጋ መቋቋም፣ ለአቅም እና ለማስፋፋት ያመቻቹ። • የእርስዎን መተግበሪያዎች ለማዳበር፣ ለመሞከር እና ለማሰማራት ምርጡን መሳሪያዎችን ይወቁ። • ለደህንነት እና ለቁጥጥር የወቅቱን የኢንዱስትሪ ልምዶችን ይጠቀሙ። • የልማት ቡድኖችን የበለጠ ቀልጣፋ፣ ፈጣን እና ቀልጣፋ ለማድረግ የDevOps መርሆዎችን በድርጅትዎ ውስጥ ይተግብሩ።

መጽሐፉ ለማን ነው?

መጽሐፉ ለአገልጋዮች፣ አፕሊኬሽኖች እና አገልግሎቶች ኃላፊነት ላላቸው የአስተዳደር ክፍሎች እንዲሁም አዲስ የደመና አገልግሎቶችን በመገንባት ወይም ነባር መተግበሪያዎችን ወደ ኩበርኔትስ እና ደመና ለማዛወር ለሚሳተፉ ገንቢዎች በጣም ጠቃሚ ነው። አይጨነቁ, ከ Kubernetes እና ኮንቴይነሮች ጋር እንዴት እንደሚሠሩ ማወቅ አያስፈልግዎትም - ሁሉንም ነገር እናስተምራለን.

ልምድ ያካበቱ የኩበርኔትስ ተጠቃሚዎች እንደ RBAC፣ ቀጣይነት ያለው ማሰማራት፣ ሚስጥራዊነት ያለው የውሂብ አስተዳደር እና ታዛቢነት ባሉ ርእሶች ጥልቅ ሽፋን ያላቸው ብዙ እሴት ያገኛሉ። ችሎታዎ እና ልምድዎ ምንም ይሁን ምን በመጽሐፉ ገፆች ላይ በእርግጠኝነት ለእርስዎ አንድ አስደሳች ነገር እንደሚኖር ተስፋ እናደርጋለን።

መጽሐፉ ምን ጥያቄዎችን ይመልሳል?

በዚህ መጽሐፍ እቅድ እና ጽሁፍ ወቅት፣ ከኢንዱስትሪ መሪዎች እና ባለሙያዎች እስከ አጠቃላይ አዲስ ጀማሪዎች ድረስ በመቶ ከሚቆጠሩ ሰዎች ጋር ስለ ደመና ስሌት እና ኩበርኔትስ ተወያይተናል። በዚህ እትም ውስጥ እንዲመለሱ የሚፈልጓቸው አንዳንድ ጥያቄዎች ከዚህ በታች አሉ።

  • "በዚህ ቴክኖሎጂ ላይ ለምን ጊዜ ማሳለፍ እንዳለብህ ለማወቅ ፍላጎት አለኝ። እኔን እና ቡድኔን ምን ችግሮች ለመፍታት ይረዳናል? ”
  • "Kubernetes የሚስብ ይመስላል፣ ግን ለመግባት በጣም ከፍተኛ የሆነ እንቅፋት አለው። ቀላል ምሳሌ ማዘጋጀት አስቸጋሪ አይደለም, ነገር ግን ተጨማሪ አስተዳደር እና ማረም አስፈሪ ነው. ሰዎች በገሃዱ አለም የኩበርኔትስ ስብስቦችን እንዴት እንደሚያስተዳድሩ እና ምን አይነት ችግሮች ልንገጥማቸው እንደምንችል አንዳንድ ጠንካራ ምክሮችን እንወዳለን።
  • “ርዕሰ-ጉዳይ ምክር ጠቃሚ ይሆናል። የኩበርኔትስ ሥነ-ምህዳር ለታዳጊ ቡድኖች ለመምረጥ ብዙ አማራጮችን ይሰጣል። ተመሳሳይ ነገር በተለያዩ መንገዶች ሊከናወን ይችላል, የትኛው የተሻለ እንደሆነ እንዴት ያውቃሉ? እንዴት ምርጫ ማድረግ ይቻላል?

እና ምናልባትም ከጥያቄዎች ሁሉ በጣም አስፈላጊው-

  • "ኩባንያዬን ሳላስተጓጉል ኩበርኔትስን እንዴት መጠቀም እችላለሁ?"

ቅንጭብጭብ። ማዋቀር እና ሚስጥራዊ ነገሮች

የኩበርኔትስ አፕሊኬሽኑን አመክንዮ ከአወቃቀሩ የመለየት ችሎታ (ይህም በጊዜ ሂደት ሊለወጡ ከሚችሉ ከማንኛውም እሴቶች ወይም መቼቶች) በጣም ጠቃሚ ነው። የማዋቀር ዋጋዎች በተለምዶ አካባቢን-ተኮር ቅንብሮችን፣ የDNS አድራሻዎችን ለሶስተኛ ወገን አገልግሎቶች እና የማረጋገጫ ምስክርነቶችን ያካትታሉ።

በእርግጥ ይህ ሁሉ በኮዱ ውስጥ በቀጥታ ሊቀመጥ ይችላል, ነገር ግን ይህ አቀራረብ በቂ ተለዋዋጭ አይደለም. ለምሳሌ፣ የውቅረት እሴት መቀየር ኮድዎን እንደገና እንዲገነቡ እና እንዲያሰማሩ ይጠይቃል። በጣም የተሻለው መፍትሔ አወቃቀሩን ከኮዱ መለየት እና ከፋይል ወይም የአካባቢ ተለዋዋጮች ማንበብ ነው.

Kubernetes ውቅረትን ለማስተዳደር ብዙ የተለያዩ መንገዶችን ይሰጣል። በመጀመሪያ በፖድ ሼል ዝርዝር ውስጥ በተገለጹት የአካባቢ ተለዋዋጮች በኩል ለመተግበሪያው እሴቶችን ማለፍ ይችላሉ (በገጽ 192 ላይ "የአካባቢ ተለዋዋጮች" ይመልከቱ)። በሁለተኛ ደረጃ የውቅረት ውሂብ ConfigMap እና ሚስጥራዊ ነገሮችን በመጠቀም በኩበርኔትስ ውስጥ በቀጥታ ሊከማች ይችላል።

በዚህ ምእራፍ ውስጥ እነዚህን ነገሮች በዝርዝር እንመረምራለን እና የማሳያ መተግበሪያን እንደ ምሳሌ በመጠቀም ውቅረትን እና ሚስጥራዊ መረጃን ለማስተዳደር አንዳንድ ተግባራዊ አቀራረቦችን እንመለከታለን።

በማዋቀር ለውጥ ላይ ፖዶችን ያዘምኑ

በክላስተርህ ውስጥ ማሰማራት እንዳለህ አስብ እና በ ConfigMap ውስጥ አንዳንድ እሴቶችን መቀየር እንደምትፈልግ አስብ። የሄልም ቻርትን እየተጠቀሙ ከሆነ ("Helm: Package Manager for Kubernetes" በገጽ 102 ይመልከቱ) የውቅረት ለውጥን በራስ-ሰር ፈልጎ በአንድ ንጹህ ብልሃት በራስ ሰር ፖድዎን መጫን ይችላሉ። የሚከተለውን ማብራሪያ ወደ እርስዎ የማሰማራት ዝርዝር መግለጫ ያክሉ።

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

የማሰማራቱ አብነት አሁን የውቅር መለኪያዎችን ቼክ ድምር ይዟል፡ መለኪያዎቹ ከተቀየሩ ድምሩ ይዘምናል። የhelm ማሻሻያ ትዕዛዙን የምታሄዱ ከሆነ፣ Helm የማሰማራቱ ዝርዝር መቀየሩን አወቀ እና ሁሉንም ፖዶች እንደገና ያስጀምራቸዋል።

በ Kubernetes ውስጥ ሚስጥራዊነት ያለው ውሂብ

የConfigMap ነገር በክላስተር ውስጥ የውቅረት ውሂብን ለማከማቸት እና ለማግኘት ተለዋዋጭ ዘዴን እንደሚሰጥ አስቀድመን እናውቃለን። ነገር ግን፣ አብዛኞቹ አፕሊኬሽኖች እንደ የይለፍ ቃሎች ወይም ኤፒአይ ቁልፎች ያሉ ሚስጥራዊ እና ሚስጥራዊ የሆኑ መረጃዎች አሏቸው። እንዲሁም በ ConfigMap ውስጥ ሊከማች ይችላል, ነገር ግን ይህ መፍትሄ ተስማሚ አይደለም.

በምትኩ ኩበርኔትስ ሚስጥራዊ መረጃዎችን ለማከማቸት ልዩ አይነት ነገርን ይሰጣል። በመቀጠል፣ ይህ ነገር በእኛ የማሳያ መተግበሪያ ውስጥ እንዴት ጥቅም ላይ እንደሚውል የሚያሳይ ምሳሌ እንመልከት።

በመጀመሪያ፣ ለሚስጥር ነገር የኩበርኔትስ መግለጫን ይመልከቱ (ሄሎ-ሚስጥር-env/k8s/secret.yaml ይመልከቱ)፡-

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

በዚህ ምሳሌ፣ magicWord የግል ቁልፍ xyzzy ነው (en.wikipedia.org/wiki/Xyzzy_(computing))። በአጠቃላይ xyzzy የሚለው ቃል በኮምፒውተሮች ዓለም ውስጥ በጣም ጠቃሚ ነው። እንደ ConfigMap፣ በሚስጥር ነገር ውስጥ ብዙ ቁልፎችን እና እሴቶችን ማከማቸት ትችላለህ። እዚህ፣ ለቀላልነት፣ አንድ ቁልፍ-እሴት ጥንድ ብቻ እንጠቀማለን።

ሚስጥራዊ ነገሮችን እንደ የአካባቢ ተለዋዋጮች መጠቀም

እንደ ConfigMap፣ ሚስጥራዊው ነገር በመያዣው ውስጥ እንደ አካባቢ ተለዋዋጮች ወይም በዲስክ ላይ እንደ ፋይል ሊቀርብ ይችላል። በሚከተለው ምሳሌ እሴቱን ከምስጢር ወደ የአካባቢ ተለዋዋጭ እንመድባለን፡

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

መግለጫዎችን ለመተግበር የሚከተለውን ትዕዛዝ በማሳያ ማከማቻ ውስጥ ያሂዱ፡-

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

እንደበፊቱ፣ ውጤቱን በአሳሽዎ ውስጥ ለማየት የአካባቢውን ወደብ ወደ ማሰማራቱ ያስተላልፉ፡-

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

አድራሻ ሲከፍቱ localhost9999/ የሚከተለውን ማየት አለብህ።

The magic word is "xyzzy"

ሚስጥራዊ ነገሮችን ወደ ፋይሎች መፃፍ

በዚህ ምሳሌ, ሚስጥራዊውን ነገር ወደ መያዣው እንደ ፋይል እናያይዛለን. ኮዱ በማሳያ ማከማቻው ውስጥ በሠላም-ሚስጥራዊ-ፋይል አቃፊ ውስጥ ይገኛል።

ምስጢሩን እንደ ፋይል ለማካተት የሚከተለውን ማስፋፊያ ይጠቀሙ፡-

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

በገጽ ላይ ባለው “ከConfigMap ነገሮች የውቅረት ፋይሎችን በማመንጨት ላይ” በሚለው ንዑስ ክፍል ላይ እንዳለ። 240, የድምጽ መጠን እንፈጥራለን (በዚህ ሁኔታ ዲሞ-ሚስጥራዊ-ጥራዝ) እና በቮልዩማንስ ዝርዝር መግለጫ ክፍል ውስጥ ወደ መያዣው እንጭነዋለን. የMountPath መስኩ ወደ/ሚስጥር ተቀናብሯል፣ስለዚህ Kubernetes በሚስጥር ነገር ውስጥ ለተገለጹት ለእያንዳንዱ ቁልፍ/እሴት ጥንድ አንድ ፋይል በዚህ አቃፊ ውስጥ ይፈጥራል።

በእኛ ምሳሌ፣ MagicWord የሚባል አንድ የቁልፍ/ዋጋ ጥንድ ብቻ ነው የገለፅነው፣ ስለዚህ አንጸባራቂው አንድ ተነባቢ-ብቻ/ምስጢር/magicWord ፋይል በኮንቴይነር ውስጥ ስሱ መረጃዎችን ይፈጥራል።

ይህንን አንጸባራቂ ከቀዳሚው ምሳሌ ጋር በተመሳሳይ መንገድ ከተጠቀሙበት ተመሳሳይ ውጤት ማግኘት አለብዎት።

The magic word is "xyzzy"

ሚስጥራዊ ነገሮችን ማንበብ

ባለፈው ክፍል የConfigMapን ይዘቶች ለማሳየት የ kubectl መግለጫ ትእዛዝን ተጠቀምን። በምስጢር ተመሳሳይ ነገር ማድረግ ይቻላል?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

ውሂቡ ራሱ እንዳልታየ ልብ ይበሉ. በ Kubernetes ውስጥ ያሉ ሚስጥራዊ ነገሮች ኦፓክ አይነት ናቸው፣ ይህ ማለት ይዘታቸው በ kubectl ውስጥ ስለማይታይ ውፅዓትን፣ ሎግ ግቤቶችን እና ተርሚናልን ይገልፃሉ፣ ይህም ሚስጥራዊ መረጃን በአጋጣሚ ለማሳየት የማይቻል ያደርገዋል።

በኮድ የተደረገውን የ YAML ስሪቱን ሚስጥራዊ ውሂብ ለማየት የ kubectl ያግኙ ትዕዛዝን ይጠቀሙ፡-

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

ቤዝ 64

ይህ eHl6enk= ከዋናው እሴታችን ፈጽሞ የተለየ ምንድነው? እሱ በእውነቱ ቤዝ64 ኮድ የተደረገ ሚስጥራዊ ነገር ነው። Base64 የዘፈቀደ የሁለትዮሽ ውሂብን እንደ የቁምፊ ሕብረቁምፊ የመቀየሪያ እቅድ ነው።

ሚስጥራዊነት ያለው መረጃ ሁለትዮሽ እና የማይታተም ሊሆን ስለሚችል (ለምሳሌ እንደ TLS ምስጠራ ቁልፍ) ሚስጥራዊ ነገሮች ሁል ጊዜ በbase64 ቅርጸት ይቀመጣሉ።

ጽሁፉ beHl6enk=የእኛ ሚስጥራዊ ቃላታችን xyzzy base64 ኮድ ስሪት ነው። በተርሚናል ውስጥ የ base64 --decode ትዕዛዝን በማሄድ ይህንን ማረጋገጥ ይችላሉ፡-

echo "eHl6enk=" | base64 --decode
xyzzy

ስለዚህ ኩበርኔትስ በተርሚናል ወይም በሎግ ፋይሎቹ ውስጥ ሚስጥራዊነት ያለው መረጃ እንዳይወጣ የሚከላከልልዎት ቢሆንም፣ ሚስጥራዊ ነገሮችን በተወሰነ የስም ቦታ ለማንበብ ፍቃድ ካሎት፣ ይህ መረጃ በbase64 ቅርጸት ሊገኝ እና በመቀጠል ዲኮድ ማድረግ ይችላል።

አንዳንድ ፅሁፎችን ቤዝ64 መክተብ ከፈለጉ (ለምሳሌ ፣ በምስጢር ውስጥ ለማስቀመጥ) የ base64 ትዕዛዝን ያለምንም መከራከሪያ ይጠቀሙ።

echo xyzzy | base64
eHl6enkK

ሚስጥራዊ ነገሮችን መድረስ

ሚስጥራዊ ነገሮችን ማን ማንበብ እና ማርትዕ ይችላል? ይህ የሚወሰነው በ RBAC, የመዳረሻ መቆጣጠሪያ ዘዴ ነው (በገጽ 258 ላይ "በሚና ላይ የተመሰረተ የመግቢያ ቁጥጥር መግቢያ" በሚለው ንዑስ ክፍል ውስጥ በዝርዝር እንነጋገራለን). RBAC የሌለው ወይም የሌለው ክላስተር እያስኬዱ ከሆነ ሁሉም ሚስጥሮችዎ ለማንኛውም ተጠቃሚ እና ኮንቴይነሮች ይገኛሉ (ከRBAC ውጪ ምንም አይነት የምርት ክላስተር ሊኖርዎት እንደማይገባ በኋላ እናብራራለን)።

ተገብሮ ውሂብ ምስጠራ

Kubernetes ሁሉንም መረጃ የሚያከማችበት የ etcd ዳታቤዝ መዳረሻ ስላላቸውስ? ሚስጥራዊ ነገሮችን በኤፒአይ በኩል ሳያነቡ ሚስጥራዊነት ያለው መረጃ ማንበብ ይችላሉ?

ከ 1.7 ስሪት ጀምሮ ኩበርኔትስ ተገብሮ የውሂብ ምስጠራን ይደግፋል። ይህ ማለት በ etcd ውስጥ ያሉ ሚስጥራዊነት ያላቸው መረጃዎች በዲስክ ላይ ተመስጥረው ይከማቻሉ እና ወደ ዳታቤዙ ቀጥተኛ መዳረሻ ያለው ሰው እንኳን ማንበብ አይችልም። ዲክሪፕት ለማድረግ የ Kubernetes API አገልጋይ ብቻ ያለው ቁልፍ ያስፈልገዎታል። በትክክል የተዋቀረ ክላስተር ተገብሮ ምስጠራ መንቃት አለበት።

ተገብሮ ምስጠራ በክላስተርህ ውስጥ እንደሚሰራ ማረጋገጥ ትችላለህ፡-

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

የሙከራ-ኢንክሪፕሽን-አቅራቢ-ውቅር ባንዲራውን ካላዩ ተገብሮ ምስጠራ አልነቃም። ጎግል ኩበርኔትስ ኢንጂንን ወይም ሌሎች የኩበርኔትስ አስተዳደር አገልግሎቶችን ስትጠቀም የአንተ ውሂብ የተመሰጠረው ሌላ ዘዴ በመጠቀም ነው፣ ስለዚህ ባንዲራ አይገኝም። ወዘተd ይዘት የተመሰጠረ መሆኑን ለማየት የኩበርኔትስ አቅራቢዎን ያነጋግሩ።

ሚስጥራዊነት ያለው ውሂብ ማከማቻ

እንደ ወሳኝ ሚስጥራዊ ነገሮች ያሉ ከጥቅል ውስጥ ፈጽሞ መወገድ የሌለባቸው አንዳንድ የኩበርኔትስ ሀብቶች አሉ። በHelm አስተዳዳሪ በቀረበው ማብራሪያ አንድ ግብአት እንዳይሰረዝ ማድረግ ትችላለህ፡-

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

ሚስጥራዊ ነገሮችን የመቆጣጠር ስልቶች

ባለፈው ክፍል ውስጥ ያለው ምሳሌ፣ ሚስጥራዊነት ያለው መረጃ በክላስተር ውስጥ ከተከማቸ በኋላ ወዲያውኑ ካልተፈቀደ መዳረሻ ተጠብቋል። በአንጸባራቂ ሰነዶች ውስጥ ግን በቀላል ጽሑፍ ውስጥ ተከማችተዋል።

ሚስጥራዊነት ያለው መረጃ በምንጭ ቁጥጥር ውስጥ ባሉ ፋይሎች ውስጥ በጭራሽ ማስቀመጥ የለብዎትም። ስለዚህ ይህንን መረጃ ወደ Kubernetes ዘለላ ከመተግበሩ በፊት እንዴት ደህንነቱ በተጠበቀ ሁኔታ ያስተዳድራሉ እና ያከማቹት?

በመተግበሪያዎችዎ ውስጥ ሚስጥራዊ መረጃዎችን ለማስተናገድ ማንኛውንም መሳሪያ ወይም ስልቶችን መምረጥ ይችላሉ፣ነገር ግን አሁንም ቢያንስ የሚከተሉትን ጥያቄዎች መመለስ ያስፈልግዎታል።

  • በጣም ተደራሽ እንዲሆን ሚስጥራዊነት ያለው መረጃ የት ማከማቸት?
  • ሚስጥራዊነት ያለው መረጃ እንዴት ለእርስዎ ንቁ መተግበሪያዎች የሚገኝ ማድረግ ይቻላል?
  • ሚስጥራዊነት ያለው ውሂብ ሲቀይሩ ወይም ሲያርትዑ የእርስዎ መተግበሪያዎች ምን መሆን አለባቸው?

ስለ ደራሲያን

ጆን አሩንደል በኮምፒዩተር ኢንዱስትሪ ውስጥ የ30 ዓመታት ልምድ ያለው አማካሪ ነው። እሱ ብዙ መጽሃፎችን ጻፈ እና በዓለም ዙሪያ ካሉ ብዙ ኩባንያዎች ጋር ስለ ደመና መሠረተ ልማት እና ኩበርኔትስ ምክር ሰጥቷል። በትርፍ ጊዜው፣ ሰርፊንግ ያስደስተዋል፣ በሽጉጥ በደንብ ይተኩሳል እና ፒያኖን አማተር ይጫወታል። በኮርንዋል፣ እንግሊዝ ውስጥ በሚያስደንቅ ጎጆ ውስጥ ይኖራል።

Justin Domingus በDevOps አካባቢ ከኩበርኔትስ እና ከደመና ቴክኖሎጂዎች ጋር የሚሰራ የስርአት አስተዳደር መሐንዲስ ነው። ከቤት ውጭ ጊዜ ማሳለፍ፣ ቡና መጠጣት፣ ሸርጣኖችን በመያዝ እና በኮምፒዩተር ላይ መቀመጥ ይወዳል። በሲያትል፣ ዋሽንግተን ከሚደነቅ ድመት እና የበለጠ አስደናቂ ሚስት እና የቅርብ ጓደኛ አድሪን ጋር ይኖራል።

» ስለ መጽሐፉ ተጨማሪ መረጃ እባክዎን ይጎብኙ የአሳታሚው ድር ጣቢያ
» ማውጫ
» የተቀነጨበ

ለ Khabrozhiteli በኩፖኑ ላይ 25% ቅናሽ - ኩባንያቶች

የመጽሐፉን የወረቀት ስሪት ሲከፍሉ, ኢ-መጽሐፍ ወደ ኢሜል ይላካል.

ምንጭ: hab.com

አስተያየት ያክሉ